R 基于双变量的条件匹配
我有一个具有类似多行和多列的DF。我想将R 基于双变量的条件匹配,r,R,我有一个具有类似多行和多列的DF。我想将Name与Name1匹配。如果Name与Name1不匹配,我还想尝试将Name与Name3匹配。然后,如果匹配,我希望Name2的值作为新变量Namevalue返回 df Name Name1 Name2 Name3 Natalie Shawn Edmund Natalie Desmond Desmond James Sue Kylie Kylie Brent Manny 期望输出 df Nam
Name
与Name1
匹配。如果Name
与Name1
不匹配,我还想尝试将Name
与Name3
匹配。然后,如果匹配,我希望Name2
的值作为新变量Namevalue
返回
df
Name Name1 Name2 Name3
Natalie Shawn Edmund Natalie
Desmond Desmond James Sue
Kylie Kylie Brent Manny
期望输出
df
Name Name1 Name2 Name3 Namevalue
Natalie Shawn Edmund Natalie Edmund
Desmond Desmond Tyler Sue Tyler
Kylie Chris Tam Kylie Tam
Leah Chewie Luke Solo Unknown
我试过这个:
Merge1$Namevalue <- ifelse(Merge1$Name %in% Merge1$Name1, Merge1$Name2,
paste("Unknown"),
ifelse(Merge1$Name %in% Merge1$Name3, Merge1$Name2, paste("Unknown"))
Merge1$Namevalue您的ifelse()
想法是一个好的开始,但是,您的条件有点错误,希望这对您有所帮助:
代码
测试:如果name1
或name3
中存在匹配项,则分配name2
:
df$Namevalue <- ifelse(df$Name %in% df$Name1 | df$Name %in% df$Name3,
df$Name2,
NA)
#
Name Name1 Name2 Name3 Namevalue
1 Natalie Shawn Edmund Natalie Edmund
2 Desmond Desmond Tyler Sue Tyler
3 Kylie Chris Tam Kylie Tam
4 Leah Chewie Luke Solo <NA>
然后创建一列,显示是否与name1
匹配
df$Namevalue <- ifelse(df$Name %in% df$Name1,
df$Name2,
NA)
#
Name Name1 Name2 Name3 Namevalue
1 Natalie Shawn Edmund Natalie <NA>
2 Desmond Desmond Tyler Sue Tyler
3 Kylie Chris Tam Kylie <NA>
4 Leah Chewie Luke Solo <NA>
df$match <- rep(NA, length(df$Namevalue))
df$match[which(!is.na(df$Namevalue))] <- "Name1"
#
Name Name1 Name2 Name3 Namevalue match
1 Natalie Shawn Edmund Natalie <NA> <NA>
2 Desmond Desmond Tyler Sue Tyler Name1
3 Kylie Chris Tam Kylie <NA> <NA>
4 Leah Chewie Luke Solo <NA> <NA>
剩余的NA的
在name1
或name3
中没有匹配项
数据
df <- read.table(text = "
Name Name1 Name2 Name3
Natalie Shawn Edmund Natalie
Desmond Desmond Tyler Sue
Kylie Chris Tam Kylie
Leah Chewie Luke Solo", header = T, stringsAsFactor = F)
#
Name Name1 Name2 Name3
1 Natalie Shawn Edmund Natalie
2 Desmond Desmond Tyler Sue
3 Kylie Chris Tam Kylie
4 Leah Chewie Luke Solo
df谢谢你。在我看到你的帖子之前,我已经做到了这一点(这让我觉得自己有点胜任)。我遇到的问题是,它返回的值必须是它匹配的精确关联行。我过去不需要使用OR条件的代码是:DF$Namevalue不幸的是,我现在不在计算机旁。一种方法是将其拆分为两个ifelse()语句。首先与name1匹配,并将1分配给另一列。然后再次与另一条ifelse()语句匹配,剩余的NA不匹配,新列指示您在第一次运行时是否匹配(使用名称1)。谢谢。不要着急。我可以等你的专家回答。
df <- read.table(text = "
Name Name1 Name2 Name3
Natalie Shawn Edmund Natalie
Desmond Desmond Tyler Sue
Kylie Chris Tam Kylie
Leah Chewie Luke Solo", header = T, stringsAsFactor = F)
#
Name Name1 Name2 Name3
1 Natalie Shawn Edmund Natalie
2 Desmond Desmond Tyler Sue
3 Kylie Chris Tam Kylie
4 Leah Chewie Luke Solo