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

  • 本文关键字:信息 关联 2次 何根 列表 5次 r grouping
  • 更新时间 :
  • 英文 :


我有一个引用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选项。我们用do.call逐行paste列的子集,然后用它来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)

最新更新