【发布时间】:2020-06-11 12:41:39
【问题描述】:
这是我的数据集的一部分:
df<-data.frame(
group=c("A","A","A","A","B","B","C","C","D","D","E","F","G","G"),
first_name=c("Linda","Linda","Linda","Linda","Henry","Henry","Hazel","Hazel","Owen","Owen","Ava","Nora","Rose","Rose"),
first_name_match=c("Linda","Linda", "John","John","Oliver","Oliver","Hazel","Violet","Owen","Owen/Ben","Ava",NA,"Alex/Rose","Alex"))
对于每个组,
1) 如果列 first_name 和 first_name 匹配相等(完全相同),则只保留这些行并删除其他行。
2) 如果列 first_name 和 first_name 匹配相等(完全相同),并且与其他行存在部分匹配。通过部分匹配,我的意思是 first_name_match 是否包含 first_name 的一部分,然后只获取完全匹配。
2)如果没有完全匹配(它们不相等),我想保留部分匹配的行。部分匹配是指 first_name_match 是否包含 first_name 的一部分。
3) 如果没有匹配/部分匹配 - 保留这些行并标记它们以供进一步理解
总的来说,我想保留完全匹配的顺序,如果没有完全匹配,则部分匹配,然后保留不匹配或不匹配的行。
请看输出:
df_final<-data.frame(
group=c("A","A","B","B","C","D","E","F","G"),
first_name=c("Linda","Linda","Henry","Henry","Hazel","Owen","Ava","Nora","Rose"),
first_name_match=c("Linda","Linda","Oliver","Oliver","Hazel","Owen","Ava",NA,"Alex/Rose"))
【问题讨论】:
-
你需要定义'部分匹配'。
-
部分匹配是名字是否在first_name_match中,例如单词Rose在Rose/Alex中。
-
您提供的 df 不是可重现的代码:每列中的行数不同,我必须更正这一点。我也浪费时间找出“不是”。为了帮助其他人帮助您,请确保您发布的代码有效。
-
当然,瓦尔迪。对此感到抱歉。