在data.table中的第一行组中分配值

时间:2014-11-19 00:28:11

标签: r grouping data.table variable-assignment

我想在data.table中仅分配组中第一行的那些值。

例如(简化):我的data.tableDT,其中包含以下内容

x v  
1 1  
2 2  
2 3  
3 4  
3 5  
3 6 

key的{​​{1}}为DT 我想解决一个小组的每一行。

这很好用:x

DT[, .SD[1], by=x]

现在,我想只将x v 1 1 2 2 3 4 的值分配给v

但这些都不起作用:

0

我搜索了包中的R-help和提供的任何链接,但我无法使其正常工作。
我发现那里的笔记说这不起作用,但没有帮助我的例子/解决方案。

我很高兴有任何建议。

(我非常喜欢这个包,我不想回到data.frame ......我得到了这个工作)

编辑:

我希望得到这样的结果:

DT[, .SD[1], by=x]$v <- 0  
DT[, .SD[1], by=x]$v := 0  
DT[, .SD[1], by=x, v:=0]

这不起作用:

x v  
1 0  
2 0  
2 3  
3 0  
3 5  
3 6  

2 个答案:

答案 0 :(得分:3)

Roland's solution的帮助下,看起来您可以执行以下操作。它简单地将零与除{1}之外的所有其他分组值v连接起来。

DT[, v := c(0L, v[-1]), by = x]   ## must have the "L" after 0, as 0L

导致

DT
#    x v
# 1: 1 0
# 2: 2 0
# 3: 2 3
# 4: 3 0
# 5: 3 5
# 6: 3 6

注意:代码的中间部分j也可以是v := c(integer(1), v[-1])

答案 1 :(得分:2)

另一种选择是:

 DT[,v:={v[1]<-0L;v}, by=x]
 DT
 #  x v
 #1: 1 0
 #2: 2 0
 #3: 2 3
 #4: 3 0
 #5: 3 5
 #6: 3 6

或者

 DT[DT[, .I[1], by=x]$V1, v:=0]
 DT
 #   x v
 #1: 1 0
 #2: 2 0
 #3: 2 3
 #4: 3 0
 #5: 3 5
 #6: 3 6