我正在尝试在R中执行一种'if'语句,我希望在两个不同的列中找到两个值(字符串)相同。例如,如果我的Origin和我的Destination国家/地区相同,我想创建一个包含Domestic的新列。如果为假,那么我最终会将NA编码为国际。
我在R中尝试了几个函数,但仍然无法正常使用它!
我认为汽车图书馆的重新编码功能非常合适。这是一个数据示例和我尝试过的两行代码示例。 谢谢你的帮助。
#Data
Origin.Country <- c("Canada","Vietnam","Maldives", "Indonesia", "Spain", "Canada","Vietnam")
Passengers <- c(100, 5000, 200, 10000, 200, 20, 4000)
Destination.Country <- c("France","Vietnam","Portugal", "Thailand", "Spain", "Canada","Thailand")
data2<-data.frame(Origin.Country, Destination.Country, Passengers)
#Creating new column
data2$Domestic<-NA
#If Origin and Destination is the same = Domestic
data2$Domestic[data2$Origin.Country==data2$Destination.Country <- Domestic
data2$Domestic <- recode(data2$Origin.Country, c(data2$Destination.Country)='Domestic', else='International')
答案 0 :(得分:1)
您可以使用ifelse
:
data2$Domestic <- ifelse(as.character(data2$Origin.Country) ==
as.character(data2$Destination.Country),
'Domestic', 'International')
我使用as.character
强制将国家/地区名称变量作为字符进行比较。 ifelse
将逻辑作为第一个参数,如果为TRUE则返回第二个参数,如果为FALSE则返回第三个参数。在这种情况下,它按行执行变量比较。
答案 1 :(得分:0)
这可能有点慢,因为它没有矢量化,但它的工作原理基于你的例子:
data2$domestic <- apply(data2, 1, function(x) {
( x["Origin.Country"] == x["Destination.Country"] )
} )
答案 2 :(得分:0)
您可以这样使用recode
:
library(dplyr); library(car)
data2 %>% mutate(Domestic = recode(as.character(Origin.Country) == as.character(Destination.Country),
"TRUE='domestic'; else='international'"))
Origin.Country Destination.Country Passengers Domestic
1 Canada France 100 international
2 Vietnam Vietnam 5000 domestic
3 Maldives Portugal 200 international
4 Indonesia Thailand 10000 international
5 Spain Spain 200 domestic
6 Canada Canada 20 domestic
7 Vietnam Thailand 4000 international