根据动态列名称对数据进行子集

时间:2014-11-25 22:09:17

标签: r

我有一个名为DF的数据集。我希望根据Column1过滤DF,所以我这样做:

DFb <- subset(DF, Column1 == "ABC")

现在,我希望基于用户输入动态定义Column1,因此用户可以根据任何列进行过滤。像这样:

Column_Name = 'Column3'  ## User defines this variable
DFb <- subset(DF, as.name(Column_Name) == "ABC")

然而,这不起作用。有什么建议吗?

1 个答案:

答案 0 :(得分:5)

使用[[ - 子集:

DFb <- DF[DF[[Column_Name]] == "ABC",]

这不如subset()那么优雅,但它有效。 subset()使用&#34;非标准评估&#34;,这对于交互式使用非常方便,但是当您想要进行这种二阶引用时会使事情变得更复杂。

主要是[[;您可以使用subset(DF,DF[[Column_Name]]=="ABC"),结果将(几乎)等效(subset()会自动删除标准评估为NA的值...)

您可以在dplyr包中执行此操作,这样可以更灵活地避免非标准评估,但它仍然有点迂回(可能有更好的方法:I&# 39;我对dplyr)没有经验。

library("dplyr")    ## for filter_()
library("lazyeval") ## for interp()
colname <- "speed"
filter_(cars,interp(~ var == 4, var = as.name(colname)))