Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按分组后连接data.table_R_Data.table - Fatal编程技术网

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