2016-11-19 24 views
2

我只是在做data.table datacamp练习,并且有些东西真的会影响我的逻辑感。 “by”运算符引用的某些列被视为与其他列不同?R data.table“j”引用“by”变量非常不直观?

所使用的数据表如下:

  DT 
     x y z 
    1: 2 1 2 
    2: 1 3 4 
    3: 2 5 6 
    4: 1 7 8 
    5: 2 9 10 
    6: 2 11 12 
    7: 1 13 14 

当我进入DT [,SUM(X),X]我希望:

x V1 
1: 2 8 
2: 1 3 

,但我得到:

x V1 
1: 2 2 
2: 1 1 

对于其他列我得到的组数总和,我期望它:

解决这个问题
> DT[,sum(y),x] 
     x V1 
    1: 2 26 
    2: 1 23 
+0

感谢您的快速答复。与寻找解决方法相比,它更像是一种风格问题。但你的看起来很直截了当。 – Cracker

+0

文档说“.BY是一个列表,其中包含'by'中每个项目的长度为1的矢量,并且也适用于出现在'by'中的所有列。你也可以用'x * .N'来获得总和。 – Frank

回答

0

一种方法是用不同的名称来命名分组变量

setnames(DT[, sum(x), .(xN=x)], "xN", "x")[] 
# x V1 
#1: 2 8 
#2: 1 3