Вид используемого условия if-else должен находиться в итеративном цикле.A для цикла , например:
for (i in 1:nrow(mydata)){
if (mydata$location_1[i] == "Ethiopia") {
if (mydata$year[i] <= 1992) mydata$location_1[i] <- "Ethiopia (-1992)"
else mydata$location_1[i] <- "Ethiopia (1993-)"
}
}
#### OUTPUT ####
year location_1
1 1994 Germany
2 1998 Germany
3 1993 Ethiopia (1993-)
4 1982 Germany
5 1989 China
6 1997 Ethiopia (1993-)
7 2001 China
8 1990 China
9 1984 Ethiopia (-1992)
10 1999 Ethiopia (1993-)
Вы можете достичь той же цели несколько более компактно (и, возможно, немного быстрее), используя векторизованную функцию ifelse
:
mydata$location_1 <- ifelse(mydata$location_1 == "Ethiopia",
ifelse(mydata$year <= 1992, "Ethiopia (-1992)", "Ethiopia (1993-)"),
mydata$location_1
)
Лично я, вероятно, просто создал бы новую переменную с названием страны, за которым следовали бы (-1992)
или (1993-)
.Он синтаксически компактен, сравнительно быстр, и вся информация сохраняется, что может быть полезно для последующего поднабора:
mydata$cy <- paste(mydata$location_1, ifelse(mydata$year <= 1992,
"(-1992)", "(1993-)"
))
#### OUTPUT ####
year location_1 cy
1 1994 Germany Germany (1993-)
2 1998 Germany Germany (1993-)
3 1993 Ethiopia Ethiopia (1993-)
4 1982 Germany Germany (-1992)
5 1989 China China (-1992)
6 1997 Ethiopia Ethiopia (1993-)
7 2001 China China (1993-)
8 1990 China China (-1992)
9 1984 Ethiopia Ethiopia (-1992)
10 1999 Ethiopia Ethiopia (1993-)
Данные:
set.seed(123)
mydata <- data.frame(year = sample(1980:2004, 10, T),
location_1 = sample(c("Ethiopia", "Germany", "China"), 10, T),
stringsAsFactors = F
)