我有两个数据集:mydata2和mydata3
Mydata2:其中包含2列:Destination.DisplayName和Partner.Type
(Partner.Type基于Destination.DisplayName)
Mydata3:其中有2列:If和Then
我需要一行代码来测试Destination.DisplayName是否等于If,如果是,则将partner.type设置为Then中的值
现在这就是我所拥有的
mydata2$Partner.Type[ mydata2$Destination.DisplayName %in% mydata3$If] = as.character((mydata3$Then[match(mydata2$Destination.DisplayName, mydata3$If)]))
有人看到这里有什么问题吗?
答案 0 :(得分:1)
我建议使用ifelse
函数:
mydata2$Partner.Type <- ifelse( mydata2$Destination.DisplayName == mydata3$If,
mydata3$Then,
mydata2$Partner.Type)
修改强>
如果列的长度不同,请尝试sapply
sapply(mydata2$Destination.DisplayName, function(element){
if ( element %in% mydata3$If ){
return(mydata3$Then[which(element == mydata3$If)])
} else {
return(mydata2$Partner.Type[which(element == mydata2$Destination.DisplayName)])
}
}) -> mydata2$Destination.DisplayName
<强> EDIT2 强>
或者您可以使用dplyr
包和left_join
功能。
library(dplyr)
mydata2 %>%
left_join(mydata3,
by = c("Destination.DisplayName" = "If")
) -> joined_mydatas
ifelse(is.na(joined_mydatas$Then),
joined_mydatas$Partner.Type,
joined_mydatas$Then) -> mydata2$Partner.Type