r - group by 之后加入 data.table

标签 r data.table

我有一个相当简单的问题,但在这里找不到合适的答案。我有以下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/

相关文章:

r - 查找包含在两个 `n1` FALSE 之间的 `n2` TRUE,整个内容包含在 `n3` TRUE 之间,等等

performance - 在没有 for 循环的情况下查找并替换每列中的第一个 NA

r - 为什么在指定自定义线型时有时会在 R 中出现段错误?

r-data.table和testthat包

r - 从data.table到eval的函数创建表达式

r - 如何提取具有正值和负值的相同行

r - R 在财务数据中使用哪个时间序列类?

r - 将 data.table 的列(名称和值)传递给函数

从 R data.table 中删除多个列,并带有要删除的列的参数

r - 如何矢量化依赖于 R 中先前计算的函数?