如何依据另一数据集的列名筛选矩阵列?
问题描述
现有数据框df1:
df1 # ABC DEF GHI JKL # 1 1 2 8 2 # 2 3 8 9 5 # 3 3 2 1 9
另有数据框df2包含ID列:
df2 # ID # 1 ABC # 2 DEF # 3 GHI
需要筛选出df1中列名存在于df2$ID中的列,尝试了以下代码但未得到预期结果:
list <- as_list(df2$ID) df3 <- df1[colnames(df1) %in% list,]
期望得到的结果:
# ABC DEF GHI # 1 1 2 8 # 2 3 8 9 # 3 3 2 1
正确实现方法
问题出在as_list()的使用上——它会把df2$ID转换成列表结构,而%in%需要的是向量类型的匹配对象。直接使用df2$ID(本身就是字符向量)即可,无需转成列表。
正确代码:
# 提取目标列名向量 target_cols <- df2$ID # 筛选df1的列 df3 <- df1[, colnames(df1) %in% target_cols]
更简洁的写法:
df3 <- df1[, colnames(df1) %in% df2$ID]
执行后就能得到你想要的结果。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

