替换单元格

时间:2015-09-15 20:08:04

标签: r shiny rstudio

我有两个数据集:mydata2和mydata3

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

(Partner.Type基于Destination.DisplayName)

Mydata3:其中有2列:If和Then

我需要一行代码来测试Dest​​ination.DisplayName是否等于If,如果是,则将partner.type设置为Then中的值

现在这就是我所拥有的

     mydata2$Partner.Type[  mydata2$Destination.DisplayName %in% mydata3$If] = as.character((mydata3$Then[match(mydata2$Destination.DisplayName, mydata3$If)]))

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

1 个答案:

答案 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