【发布时间】:2014-04-29 20:18:58
【问题描述】:
我正在尝试使用一个可以包含动态生成的列过滤条件的变量来从数据框中获取子集。 这是情况: 1)数据是一个数据框,列如图所示
Symbol Yield PE DivGrowth
1 ABBV 3.46 18.80 5.00
2 ABM 2.24 21.18 3.33
3 ABT 2.26 23.65 10.85
4 ADM 1.91 22.29 9.08
5 ADP 2.46 25.83 8.57
6 AFL 2.25 9.26 5.97
7 ALB 1.44 13.53 13.15
8 ANDE 1.02 19.59 5.74
9 AOS 1.29 25.11 9.99
10 APD 2.41 25.08 2.53
11 ARLP 5.50 11.69 1.99
12 AROW 3.83 14.68 1.01
13 ARTNA 3.67 23.91 3.20
14 ATNI 1.68 3.14 7.50
15 ATO 2.97 18.59 1.72
2) 我可以在函数调用本身中使用条件进行子集化,例如,
subset(data, PE <= 12 & Yield >=2.98)
Symbol Yield PE DivGrowth
11 ARLP 5.5 11.69 1.99
3) 但是,如果我把它作为一个字符放入一个变量中
divSelector<-c("PE <= 12 & Yield >=2.98")
4) 然后使用该变量进行子集化;我收到如下错误
subset(data, divSelector)
Error in subset.data.frame(data, divSelector) :
'subset' must evaluate to logical
5)我已经尝试过这个有效的序列,即,
ss<-expression(PE <= 12 & Yield >=2.98)
subset(data, eval(ss))
6) 但问题是我无法动态更改“ss”中的条件,例如,我想将PE <= 12 更改为取决于其他内容的内容,例如PE <= threshold,这是在其他地方评估的。
7) 看起来动态过滤条件在从直向量中进行选择时会产生相同的错误!
有什么办法可以做到吗?
【问题讨论】:
-
问题仍然是我无法在某种向量中设置可变数量的列并将其传递。实际上,有 20 个不同的列,我想使用 6 个或 8 个或其他。所有解决方案都迫使我在函数调用参数中指定列名,我一直在寻找解决方法。
标签: r