首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >group by后加入data.table

group by后加入data.table
EN

Stack Overflow用户
提问于 2020-05-25 06:46:23
回答 1查看 34关注 0票数 2

我有一个相当简单的问题,我在这里找不到合适的答案。我有以下data.table,如果组ID有一个具有特定值的观测值(在本例中为13 ),我希望创建一个等于1的指示符变量

代码语言:javascript
复制
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行话中是一个简单的拆分-应用-组合,应该是:

代码语言:javascript
复制
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的方式。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-25 06:51:12

如果'A‘中有等于13的any值,我们可以使用'ID’分组来赋值(:=)

代码语言:javascript
复制
library(data.table)
DT[,  B := +(any(A == 13)), ID]

或使用%in%

代码语言:javascript
复制
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
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61993332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档