我想检查我的数据并为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
感谢您的帮助
答案 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))