我有一个相当简单的问题,我在这里找不到合适的答案。我有以下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行话中是一个简单的拆分-应用-组合,应该是:
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的方式。谢谢!
发布于 2020-05-25 06:51:12
如果'A‘中有等于13的any值,我们可以使用'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 0https://stackoverflow.com/questions/61993332
复制相似问题