我想在data.table
中仅分配组中第一行的那些值。
例如(简化):我的data.table
为DT
,其中包含以下内容
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
答案 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