我有一个名为DF的数据集。我希望根据Column1过滤DF,所以我这样做:
DFb <- subset(DF, Column1 == "ABC")
现在,我希望基于用户输入动态定义Column1,因此用户可以根据任何列进行过滤。像这样:
Column_Name = 'Column3' ## User defines this variable
DFb <- subset(DF, as.name(Column_Name) == "ABC")
然而,这不起作用。有什么建议吗?
答案 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)))