如何根据列表中至少有 2 次对应信息的列确定组关联?

How to determine a group association based on columns from list with corresponding information at least 2 out of 5 times?

我有一个引用 5 列的列表

list<-c("Last Name","First Name", "Email","Address", "Phone Number")

我有一个看起来像这样的数据集

ID|First Name|Last Name|First Name|Email             |Address           |Phone
 1 Wayne     Bruce      BWayne@gmail.com   1995 Gotham Avenue 111-111-1111 
 2 Kent      Clark      Ckent@Yahoo.com    200 Kryptonite St  222-222-2222
 3 Wayne                                   200 Kryptonite St
 4 Parker    Peter      PParker@gmail.com  100 Mae Road       333-333-3333
 4 Wayne     Bruce
 5 Parker                                                     333-333-3333
 6 Murdock   Matthew    MMurdock@hotmai.com 100 Main Road     444-444-4444
 7 Wayne

如何像这样组织数据集

 ID|First   |Last Name|First Name|Email             |Address           |Phone  |Group
 1 Wayne     Bruce      BWayne@gmail.com   1995 Gotham Avenue 111-111-1111 1
 2 Kent      Clark      Ckent@Yahoo.com    200 Kryptonite St  222-222-2222 2
 3 Wayne                                   200 Kryptonite St               1
 4 Parker    Peter      PParker@gmail.com  100 Mae Road       333-333-3333 3
 4 Wayne     Bruce                                                         1
 5 Parker                                                     333-333-3333 3
 6 Murdock   Matthew    MMurdock@hotmai.com 100 Main Road     444-444-4444 4
 7 Wayne                                                                   5

请注意,最后一个 Wayne 与第一个 Wayne 没有关联,因为它只有一个列与其他时间有 Wayne 相同。

这里有一个 match 的选项。我们 paste 使用 do.call 逐行的子集,然后将其用于 match 和那些 unique 值以获得索引

v1 <- do.call(paste, df1[list])
df1$Group <- match(v1, unique(v1))

或使用dplyr

library(dplyr)
df1 %>%
    group_by(across(all_of(list))) %>%
    mutate(Group = cur_group_id())

如果我们要删除 NA,请使用 unite

library(tidyr)
df1 %>%
    mutate(across(all_of(list), na_if, "")) %>%
    unite(grp, all_of(list), na.rm = TRUE) %>%
    mutate(Group = match(grp, unique(grp)), grp = NULL)