首页 > 解决方案 > 检查每个组的数据是否重复

问题描述

我想检查我的数据并为 R 中的一组数据分配重复值。在这种情况下,该组是 ID。

这就是数据的样子。

ID, SET
1,1 
1,1
1,3
1,2
2,1
2,1
2,1
2,1
3,2
3,2
3,2
3,2

我想得到这个结果。

ID, SET, Index
1,1,0
1,1,0
1,3,0
1,2,0
2,1,1
2,1,1
2,1,1
2,1,1
3,2,1
3,2,1
3,2,1
3,2,1

谢谢你的帮助

标签: r

解决方案


按“ID”分组后,通过检查“SET”中不同元素的数量来创建“索引”列

library(dplyr)
df1 %>%
     group_by(ID) %>%
     mutate(index = as.integer(n_distinct(SET) ==1))
# A tibble: 12 x 3
# Groups:   ID [3]
#      ID   SET index
#   <int> <dbl> <int>
# 1     1     1     0
# 2     1     1     0
# 3     1     3     0
# 4     1     2     0
# 5     2     1     1
# 6     2     1     1
# 7     2     1     1
# 8     2     1     1
# 9     3     2     1
#10     3     2     1
#11     3     2     1
#12     3     2     1

或者另一种选择是base R

df1$index <- +(with(df1, ave(SET, ID, FUN = function(x) length(unique(x))) == 1))

或者一个选项table

transform(df1, index = ID %in% names(which(table(unique(df1)$ID) == 1)))

数据

df1 <- structure(list(ID = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 
3L, 3L), SET = c(1, 1, 3, 2, 1, 1, 1, 1, 2, 2, 2, 2)), 
class = "data.frame", row.names = c(NA, 
-12L))

推荐阅读