首页 > 解决方案 > 确定一个值是否被 R 中的组重复

问题描述

我有一个包含许多列和行的数据。我想通过创建新的逻辑变量来确定组的值是否重复(相同)。

所以我的数据看起来像这样:

v0 <- c(1,2,3,4,5,6,7,8,9)
v1 <- c("a", "b", "a", "c","e", "c", "b", "b", "e")
v2 <- c("R", NA, "R", "R", "G","C", "R", "R", "G")
dftest <- data.frame(v0, v1, v2)

  v0 v1   v2
1  1  a    R
2  2  b <NA>
3  3  a    R
4  4  c    R
5  5  e    G
6  6  c    C
7  7  b    R
8  8  b    R
9  9  e    G

我需要以相同的 v1 值是否采用相同的 v2 值的方式比较 v1 和 v2 的值。所以我的输出 df 看起来像这样:

v3 <- c(T, F, T, F, T, F, F, F, T )
dfresult <- data.frame(v0, v1, v2, v3)

  v0 v1   v2    v3
1  1  a    R  TRUE
2  2  b <NA> FALSE
3  3  a    R  TRUE
4  4  c    R FALSE
5  5  e    G  TRUE
6  6  c    C FALSE
7  7  b    R FALSE
8  8  b    R FALSE
9  9  e    G  TRUE

任何下垂将不胜感激。谢谢。

标签: rgrouping

解决方案


一种方法如下。就我看到您的问题而言,当组中只有一个唯一值时,您似乎想返回 TRUE v2。否则,您想返回 FALSE。

library(dplyr)

group_by(dftest, v1) %>% 
mutate(v3 = n_distinct(v2) == 1)

#     v0 v1    v2    v3   
#  <dbl> <fct> <fct> <lgl>
#1     1 a     R     TRUE 
#2     2 b     NA    FALSE
#3     3 a     R     TRUE 
#4     4 c     R     FALSE
#5     5 e     G     TRUE 
#6     6 c     C     FALSE
#7     7 b     R     FALSE
#8     8 b     R     FALSE
#9     9 e     G     TRUE

如果您使用 data.table 包,您可以执行以下操作。

setDT(dftest)[, v3 := uniqueN(v2) == 1, by = v1][]

推荐阅读