0

我正在尝试在 R 中执行一种“if”语句,我想在其中查找两个值(字符串)在两个不同的列中是否相同。例如,如果我的 Origin 和 Destination country 相同,我想创建一个新列,结果是国内。如果为假,那么最终我会将 NA 编码为 International。

我在 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')
4

3 回答 3

1

您可以使用ifelse

data2$Domestic <- ifelse(as.character(data2$Origin.Country) == 
                         as.character(data2$Destination.Country), 
                         'Domestic', 'International')

我曾经as.character强制将国家名称变量作为字符进行比较。ifelse将逻辑值作为第一个参数,如果为 TRUE,则返回第二个参数,如果为 FALSE,则返回第三个参数。在这种情况下,它按行对变量进行比较。

于 2016-06-01T14:17:36.413 回答
0

这可能有点慢,因为它没有矢量化,但它根据您的示例工作:

data2$domestic <- apply(data2, 1, function(x) {
    ( x["Origin.Country"] == x["Destination.Country"] )
} )
于 2016-06-01T14:09:18.597 回答
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
于 2016-06-01T14:26:10.647 回答