从R中的全名中删除重复的名字

从R中的全名中删除重复的名字,r,dataframe,R,Dataframe,考虑以下data.frame: df <- data.frame(ID = 1:3, Name = c("Xiao-Li Meng, Michael Drake, Jennifer Chayes, Chayes, Michael Jordan, John DeNero, Ani Adhikari, Jordan, Mia Scher", "Nenshad Bardoliwalla, Bardoliwalla, Alex Woodie", "

考虑以下data.frame:

df <- data.frame(ID = 1:3, Name = c("Xiao-Li Meng, Michael Drake, Jennifer Chayes, Chayes, Michael Jordan, John DeNero, Ani Adhikari, Jordan, Mia Scher", "Nenshad Bardoliwalla, Bardoliwalla, Alex Woodie", "Jill McKeon, Jan Nygaard Jensen, Hongyu Zhao, Xinxin (Katie) Zhu, Clive R. Wood") , stringsAsFactors = FALSE)

df回答

使用grepl查找[1]不包含空格且[2]存在于其他名称中的字符串

代码

df$UniqueName <- sapply(df$Name, function(x) {
  sn <- unlist(strsplit(x, split = ", ", fixed = TRUE))
  sn2 <- sn[!(!grepl(" ", sn) & sapply(sn, function(y) sum(grepl(y, sn)) > 1))]
  paste(sn2, collapse = ", ")
})

df$UniqueName我知道您接受了我的答案,但由于您添加了名称
Jan Nygaard Jensen
,因此我的答案没有涵盖您的新示例。在这种情况下,我的代码将不起作用,因为它将在
Jan Nygaard
(或
Jan Jensen
,或
Nygaard Jensen
)中作为全名处理,因此从不排除它。如果可以,那么我的代码也可以。如果这不好,那么你可能想进一步澄清一下开场白。没关系。我正在寻找一个解决方案,它将与任何一个名字/姓氏重复工作删除。
df$UniqueName <- sapply(df$Name, function(x) {
  sn <- unlist(strsplit(x, split = ", ", fixed = TRUE))
  sn2 <- sn[!(!grepl(" ", sn) & sapply(sn, function(y) sum(grepl(y, sn)) > 1))]
  paste(sn2, collapse = ", ")
})