我想基于对某些行的重复观察来唯一地标记数据集(df)。例如:
-keepclassmembers class * {
@com.google.api.client.util.Key <fields>;
}
但是我想要一个数据集,该数据集根据名称1到5标记相同的行,并按如下所示删除唯一行
ID Name1 Name2 Name3 Name4 Name5
1 abc NA rr def NA
2 AA NA NA NA NA
3 abc NA rr def NA
5 rty NA NA NA NA
6 rty NA NA NA NA
7 rty NA NA NA NA
到目前为止,我已经做到了:
ID Name1 Name2 Name3 Name4 Name5 Flag
1 abc NA rr def NA a
3 abc NA rr def NA a
5 rty NA NA NA NA b
6 rty NA NA NA NA b
7 rty NA NA NA NA b
但这仅不会标记重复的列。
非常感谢您!
答案 0 :(得分:0)
一种使用基数R的可能方法,其中,我们(1)使用ID
和duplicated
过滤另外的unique
来过滤唯一的重复行(不考虑Flag
)列,然后(2)将过滤的data.frame合并回到Name
列上的原始数据:
df1 <- unique(df[duplicated(df[, -1]) | duplicated(df[, -1], fromLast = TRUE), -1])
df1$Flag <- letters[seq_len(nrow(df1))]
merge(df, df1, by = names(df)[-1])
#> Name1 Name2 Name3 Name4 Name5 ID Flag
#> 1 abc NA rr def NA 1 a
#> 2 abc NA rr def NA 3 a
#> 3 rty NA <NA> <NA> NA 5 b
#> 4 rty NA <NA> <NA> NA 6 b
#> 5 rty NA <NA> <NA> NA 7 b
数据
df <- structure(list(ID = c(1L, 2L, 3L, 5L, 6L, 7L), Name1 = c("abc",
"AA", "abc", "rty", "rty", "rty"), Name2 = c(NA, NA, NA, NA,
NA, NA), Name3 = c("rr", NA, "rr", NA, NA, NA), Name4 = c("def",
NA, "def", NA, NA, NA), Name5 = c(NA, NA, NA, NA, NA, NA)), row.names = c(NA,
-6L), class = "data.frame")
答案 1 :(得分:0)
这是dplyr
的一种方式-
df %>%
group_by_at(vars(starts_with("Name"))) %>%
filter(n() > 1) %>%
mutate(Flag = group_indices()) %>%
ungroup()
# A tibble: 5 x 7
ID Name1 Name2 Name3 Name4 Name5 Flag
<int> <chr> <lgl> <chr> <chr> <lgl> <int>
1 1 abc NA rr def NA 1
2 3 abc NA rr def NA 1
3 5 rty NA <NA> <NA> NA 2
4 6 rty NA <NA> <NA> NA 2
5 7 rty NA <NA> <NA> NA 2