i中的子集由data.table中的变量名称设置

时间:2016-08-10 13:43:11

标签: r data.table

假设我有一个data.table,其中包含在变量中指定的列名。例如,我可能使用dcast作为:

groups <- sample(LETTERS, 2) # i.e. I don't now the values
dt1 <- data.table(ID = rep(1:2, each = 2), group = groups, value = 3:6)
(dt2 <- dcast(dt1, ID~group, value.var = "value"))
#    ID D Q
# 1:  1 3 4
# 2:  2 5 6

现在我想基于最后两列中的值进行子集化,例如做类似的事情:

dt2[groups[1] == 3 & groups[2] == 4]
# Empty data.table (0 rows) of 3 cols: ID,D,Q

有简单的方法吗? 我发现我可以用钥匙做到这一点:

setkeyv(dt2, groups)
dt2[.(3, 4)]
#    ID D Q
# 1:  1 3 4

但是我如何做更精细的事情,如

dt2[groups[1] > 3 & groups[2] < 7]

2 个答案:

答案 0 :(得分:5)

您可以使用get(来自?get

  

按名称搜索对象

dt2[get(groups[1]) > 2 & get(groups[2]) == 4]
#   ID A J
#1:  1 3 4

答案 1 :(得分:0)

我们可以将evalas.name一起使用,它应该比get更快

dt2[eval(as.name(groups[1])) > 2 & eval(as.name(groups[2])) == 4]
#   ID L U
#1:  1 4 3