r - 标记 data.table 的某些列中具有相同行的组

标签 r data.table

我有一个大型数据表,其结构与此可重现示例类似:

d <- data.table(
  g     =c(1  ,1  ,2  ,2  ,2  ,3  ,3  , 4 , 4),
  A     =c('a','a','b','b','w','c','q','r','r'),
  B     =c(1  ,1  ,2  ,2  ,2  ,3  ,3  ,4  , 5),
  sameA =c(T  , T , F , F , F , F , F , T , T),
  sameAB=c(T  , T , F , F , F , F , F , F , F)
 )

g表示群体,AB是个体特征。我想创建变量:

  • sameA :表示 A 对于该组的所有观察值都是相同的
  • sameAB :表示 A 和 B 对于该组的所有观测值都是相同的

如何使用 data.table 有效地做到这一点?

最佳答案

也许你可以试试这个。使用 uniqueN 确定每组唯一值的数量(使用 by = g),并与 1 进行比较。

library(data.table)

d[, c("sameAnew", "saveABnew") := list(uniqueN(A) == 1, uniqueN(A) == 1 & uniqueN(B) == 1), by = g]

或者按照 @jangorecki 的建议,创建一个用大括号 {} 抑制的临时变量,以避免重复 uniqueN(A):

d[, c("sameAnew", "saveABnew") := {tmp <- uniqueN(A); list(tmp == 1, tmp == 1 & uniqueN(B) == 1)}, by = g]

输出

   g A B sameA sameAB sameAnew saveABnew
1: 1 a 1  TRUE   TRUE     TRUE      TRUE
2: 1 a 1  TRUE   TRUE     TRUE      TRUE
3: 2 b 2 FALSE  FALSE    FALSE     FALSE
4: 2 b 2 FALSE  FALSE    FALSE     FALSE
5: 2 w 2 FALSE  FALSE    FALSE     FALSE
6: 3 c 3 FALSE  FALSE    FALSE     FALSE
7: 3 q 3 FALSE  FALSE    FALSE     FALSE
8: 4 r 4  TRUE  FALSE     TRUE     FALSE
9: 4 r 5  TRUE  FALSE     TRUE     FALSE

关于r - 标记 data.table 的某些列中具有相同行的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62475013/

相关文章:

r - 更改多个列表的列表元素名称

r - 获取 Xaringan 增量动画以打印为 PDF?

r - Flexdashboard 多属性页面

r - 根据 data.table 中的另一列创建一列唯一标识符

基于整数列的R : data.表子设置

sql - 日期范围内的移动总和

r - R 的乐透功能

在一条语句中重命名多个字段值

r - 在 Data.table 中使用汇总函数

r - 匹配另一个表中一个表的列,以获取 R 中主表中所需的列