data.table按J中定义的列进行子集化

时间:2016-12-12 01:05:51

标签: r data.table

我想基于我在j参数中创建的列来对data.table进行子集化。我假设这是不可能的,因为我得到了" eval中的错误(expr,envir,enclos):object' suma'找不到" (下面的例子),但也许有办法绕过它。有什么建议吗?

谢谢,

test <- data.table(A = c('a','b','c'), B = rep(c(1,2,3),4), C = c('typ1','typ2'))

head(test)
   A B    C
1: a 1 typ1
2: b 2 typ2
3: c 3 typ1
4: a 1 typ2
5: b 2 typ1
6: c 3 typ2

test[ suma > 4  , .(suma = sum(B)) , by = .(A,C)]

Error in eval(expr, envir, enclos) : object 'suma' not found

1 个答案:

答案 0 :(得分:3)

解决方法是在单独的操作中创建列后进行过滤。在data.table中,可以使用[

将其链接到上一操作的末尾
test[ , .(suma = sum(B)) , by = .(A,C)][suma > 4]
#    A    C suma
# 1: c typ1    6
# 2: c typ2    6