我有一个引用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)