使用dplyr选择列

时间:2015-03-24 09:42:08

标签: r subset dplyr

我正在尝试使用select的{​​{1}}函数来提取另一个数据帧的列。

这里是数据框:

dplyr

这里我想用作过滤器的字符向量:

dput(df1)
structure(list(Al = c(30245, 38060, 36280, 24355, 27776, 35190, 
38733.8, 36400, 29624, 33699.75), As = c(9, 8.75, 13.5, 7.75, 
7.6, 8.33, 8, 8.75, 7.4, 8.25), Cd = c(0.15, 0.13, 0.15, 0.1, 
0.16, 0.13, 0.24, 0.15, 0.22, 0.13), Cr = c(108.5, 111.75, 104.5, 
81.25, 93.2, 109.75, 105, 104, 87.8, 99.75), Hg = c(0.25, 0.35, 
0.48, 1.03, 1.12, 0.2, 1.14, 0.4, 2, 0.48)), row.names = c(NA, 
10L), class = "data.frame", .Names = c("Al", "As", "Cd", "Cr", 
"Hg"))

正如您所看到的,dput(vec_fil) c("Elemento", "As", "Cd_totale", "Cr_totale", "Cu_totale", "Hg", "Ni_totale", "Pb_totale", "Zn_totale", "Composti_organostannici", "PCB_totali", "Sommatoria_DDD", "Sommatoria_DDE", "Sommatoria_DDT", "Clordano", "Dieldrin", "Endrin", "Esaclorocicloesano", "Eptacloro_epossido", "Sommatoria_IPA", "Acenaftene", "Antracene", "Benzo.a.antracene", "Benzo.a.pirene", "Crisene", "Dibenzo.ac._.ah.antracene", "Fenantrene", "Fluorantene", "Fluorene", "Naftalene", "Pirene") 有许多字符与df1的列不匹配,因此我收到此错误:

vec_fil

我可以使用任何提示,以便只获取新数据框中滤镜矢量的匹配字符?

3 个答案:

答案 0 :(得分:6)

您可以在基础R

中尝试此代码
df1[, names(df1) %in% vec_fil]

如果您想使用包dplyr

select(df1, which(names(df1) %in% vec_fil))

答案 1 :(得分:5)

我迟到了。但是,没有人解释错误的原因是什么。所以,我这样做。

您错误地使用了one_of()包中的dplyr。根据包文档,它选择[all]向量中的变量。

  

one_of(" x"," y"," z"):选择字符向量中提供的变量。

它不允许您从one_of()向量中选择变量子集,尽管函数名称暗示了这一点。

在您的情况下,vec_fil向量具有数据框中不存在的一些要素名称。因此,它会引发错误。只有当您有一长串功能名称并且不想手动输入时,才应使用one_of()。因此,您可以直接从列表中阅读它们。

希望它能帮助你完成未来的工作。

答案 2 :(得分:2)

使用intersect删除数据框中未包含的变量名称:

select(df1, one_of(intersect(vec_fil, names(df1))))