更换电池
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
我有两个数据集: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