r - R:按列名过滤数据框,并在不同的数据框列中使用字符串匹配
问题描述
我有两个数据框,如下所示。我想做的是对第一个数据框进行子集化,以仅保留其列名出现在第二个数据框的列中的列,以及与一个特定字符串匹配的部分字符串的列。实际数据更长,名称更多样化,所以我需要一些可以轻松应用于所有这些的东西。
df1:
abc1 | abc2 | acd1 | abd1 | acd2 | xxx1 | xxx2 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
df2:
样本 | 全部的 |
---|---|
abc1 | 5 |
abc2 | 4 |
所需的df3:
abc1 | abc2 | xxx1 | xxx2 |
---|---|---|---|
1 | 2 | 6 | 7 |
这是我尝试过的
keep <- df2$sample
df3 <- df1 %>% select(contains(keep))
它保留了所有具有部分字符串匹配的列,而不是完整的字符串匹配
keep <- df2$sample
df3 <- filter(df1, grepl(keep,colnames(df1)))
这给了我一个错误,输入 1 的大小必须为 1037 或 1,而不是 160(1037= df1 中的 #of 行,160= #of 列)
此外,这不处理 xxx 列。为此,我尝试了以下方法
cols <- colnames(df1)
keep <- list.append(keep, colnames(df1) %>% select(contains("xxx")))
keep <- list.append(keep, filter(colnames(df1), grepl("xxx",df1)))
keep <- list.append(keep, cols %>% select(contains("xxx")))
keep <- list.append(keep, filter(cols, grepl("xxx",cols)))
keep <- list.append(keep, grepl("xxx",cols))
导致错误
no applicable method for x applied to an object of class "character"
其中 x 是类似过滤器的函数
keep <- list.append(keep, grepl("xxx",colnames(df1)))
它将每个列名的真/假结果附加到列表中。
我不喜欢这种做事方式,所以任何和所有的解决方案都值得赞赏,一个列表对我来说似乎是最简单的方法。
解决方案
根据 Martin Gals 的评论
df1 %>% select(contains("xxx"), df2$sample)
推荐阅读
- python - 如何使布尔字段在 Django 中仅包含一个 True 值
- python - 我们可以在图像处理中使用哪些技术来减少图像的熵?
- angular - 如何在角度 2+ 的外部文件中设置 api 端点 url
- php - 如何从 php 在 exec 中运行 rsync?
- javascript - 使用 es6 快捷方式减少代码片段中的行数
- python - ID 和月份上的 Groupby 列,并为每个月分配值作为新的 colmuns
- python - (已解决)- 在 Linux 中使用 Eric-IDE 和 pyenv
- python - 如何根据其他数据框的条件删除熊猫组
- python - Django:ModuleNotFoundError:没有名为“sslserver”的模块
- android - 每次切换标签时,AnyChart AreaChart 都会翻倍