我有一个包含名称字符串的 Dataframe :
df =data.frame("names" = c("George Orwell; Ayn Rand; Adam Smith", "George Orwell; Rand; Orwell"))
df
names
1 George Orwell; Ayn Rand; Adam Smith
2 George Orwell; Rand; Orwell
我想删除所有重复的名字,这样每个列表就只有唯一的名字。在只有姓氏的地方,如果姓氏是唯一的,我想保留它,但如果在同一个字符串中有一个完整的名字,我想删除它。所以上面df的结果是:
names
1 George Orwell; Ayn Rand; Adam Smith
2 George Orwell; Rand
我只能保留唯一值:
sapply(strsplit(df$names, ";\\s*"), function(z) paste(unique(z), collapse = "; "))
[1] "George Orwell; Ayn Rand; Adam Smith" "George Orwell; Rand; Orwell"
但这会使“Orwell”保留在df$names[2]中。
3条答案
按热度按时间x6yk4ghg1#
您已接近,我们可以
gsub
删除除姓氏以外的所有内容,并且paste
仅包含!duplicated
标记的部分。也适用于中间名(但可能无法处理不带连字符的两部分姓氏)。2q5ifsrm2#
尽管这不是有效的答案而是替代方法
创建于2023年2月12日,使用reprex v2.0.2
igetnqfo3#
可能的解决方案:
此脚本将按姓氏识别重复项,但在每种情况下检索较长的名称。