gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:48:00 25 4
gpt4 key购买 nike

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com