如何解决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,cols)))
keep <- list.append(keep,cols))
导致错误
no applicable method for x applied to an object of class "character"
其中 x 是类似 filter 的函数
keep <- list.append(keep,colnames(df1)))
将每个列名的真/假结果附加到列表中。
我不喜欢这种做事方式,所以任何和所有解决方案都值得赞赏,列表对我来说似乎是最简单的方法。
解决方法
根据 Martin Gals 的评论
df1 %>% select(contains("xxx"),df2$sample)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。