R 按分组后连接data.table
我有一个相当简单的问题,我在这里找不到合适的答案。我有以下R 按分组后连接data.table,r,data.table,R,Data.table,我有一个相当简单的问题,我在这里找不到合适的答案。我有以下数据。表,如果组ID有一个具有特定值的观察值(在本例中为13),我想创建一个等于1的指标变量: 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行话中的简单拆分应用联合收割机,将是:
数据。表
,如果组ID
有一个具有特定值的观察值(在本例中为13
),我想创建一个等于1的指标变量:
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']
的思路做一些事情,这有点可行,但对于观察值不等于13的组,会产生一些-Inf
值。有更好的方法吗
在split-apply-combine框架中,我将从DT[a==13,B:=1,by='ID']开始,然后执行左连接,但希望尽可能以
data.table
的方式执行。谢谢 如果“a”中有任何等于13的值,我们可以使用“ID”分组来赋值(:=
)
library(data.table)
DT[, B := +(any(A == 13)), ID]
或者在%
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