Dan*_*iel 5 indexing r key logical-operators data.table
我试图找出我如何执行logical operators,当我使用索引中data.table package的R?
以下是示例.我datatable命名为dt.然后把它var2作为我的关键datatable:
> dt = data.table(var1 = rep(LETTERS[1:5],2), var2 = seq(1,20, 2), var3 = ceiling(rnorm(10, 3, 2)))
> dt
var1 var2 var3
1: A 1 5
2: B 3 3
3: C 5 0
4: D 7 6
5: E 9 3
6: A 11 4
7: B 13 2
8: C 15 1
9: D 17 3
10: E 19 7
> setkey(dt, var2)
Run Code Online (Sandbox Code Playgroud)
所以现在我想找出我的所有已定义的值key (var2)它们less than 10 ( <10).做以下尝试给我errors.
> dt[ < 10]
Error: unexpected '<' in "dt[ <"
> dt[ .< 10]
Error in eval(expr, envir, enclos) : object '.' not found
> dt[ .(< 10)]
Run Code Online (Sandbox Code Playgroud)
我的期望是:
var1 var2 var3
1: A 11 4
2: B 13 2
3: C 15 1
4: D 17 3
5: E 19 7
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我知道只要这样做dt[var2 <10]我就会得到结果.但请考虑我想要获得索引的概念data.table并理解并知道如何在不调用key(var2)每个命令的情况下执行此操作!
任何有关解释的帮助都非常感谢.
从 中?setkey,key(dt)获取字符向量中的关键列。假设您的表只有一个键列,那么您可以通过以下方式获得您想要的内容:
dt[dt[[key(dt)]] < 10]
Run Code Online (Sandbox Code Playgroud)
感谢 David Arenburg,您还可以使用get():
dt[get(key(dt)) < 10]
Run Code Online (Sandbox Code Playgroud)
这有点短,可能是要走的路。
我能想到的另一种方法更糟糕:
dt[eval(parse(text = paste(key(dt), "< 10")))]
Run Code Online (Sandbox Code Playgroud)