更换电池

Replacement of Cells

我有两个数据集:mydata2 和 mydata3

Mydata2:其中有 2 列:Destination.DisplayName 和 Partner.Type

(Partner.Type 基于 Destination.DisplayName)

Mydata3:其中 2 列:如果和然后

我需要一行代码来测试 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)]))

有人看到这里有什么问题吗?

我建议使用 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