检查每个组的数据是否重复

时间:2019-08-28 15:17:00

标签: r

我想检查我的数据并为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

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

按“ 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))