我有一个相当简单的问题,但在这里找不到合适的答案。我有以下data.table
,如果组 ID
,我想创建一个等于 1 的指示变量具有特定值的观测值,在本例中为 13
:
DT = data.table(ID = c(1, 1, 2, 3, 3, 3), A = c(13, 1, 13, 11, 12, 12))
DT
ID A
1: 1 13
2: 1 1
3: 2 13
4: 3 11
5: 3 12
6: 3 12
我想要的结果,即 dplyr 行话中的简单拆分-应用-组合,将是:
DT
ID A B
1: 1 13 1
2: 1 1 1
3: 2 13 1
4: 3 11 0
5: 3 12 0
6: 3 12 0
我的想法是按照 DT[A == 13, B := 1][, B := max(B, na.rm=TRUE), by='ID']
做一些事情,它确实有效,但会产生一些 -Inf
没有观察值的组的值等于 13。有更好的方法吗?
在拆分-应用-组合框架中,我将从 DT[A == 13, B := 1, by='ID']
开始,然后执行 LEFT JOIN,但想要执行 data.table
尽可能多的方式。谢谢!
最佳答案
如果“A”中存在等于 13 的任何
值,我们可以使用“ID”分组来分配 (:=
)
library(data.table)
DT[, B := +(any(A == 13)), ID]
或者使用%in%
DT[, B := +(13 %in% A), ID]
DT
# ID A B
#1: 1 13 1
#2: 1 1 1
#3: 2 13 1
#4: 3 11 0
#5: 3 12 0
#6: 3 12 0
关于r - group by 之后加入 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61993332/