如何根据列表中至少有 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)
我有一个引用 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)