Я все еще учусь переводить код SAS в R и получаю предупреждения. Мне нужно понять, где я делаю ошибки. Что я хочу сделать, это создать переменную, которая суммирует и дифференцирует 3 статуса населения: материковый, заграничный, иностранный. У меня есть база данных с 2 переменными:
- национальность id:
idnat
(французский, иностранец),
Если idnat
французский, то:
- место рождения id:
idbp
(материк, колония, зарубежье)
Я хочу обобщить информацию из idnat
и idbp
в новую переменную с именем idnat2
:
- статус: k (материк, заграница, иностранец)
Все эти переменные используют "тип символа".
Ожидаемые результаты в столбце idnat2:
idnat idbp idnat2
1 french mainland mainland
2 french colony overseas
3 french overseas overseas
4 foreign foreign foreign
Вот мой код SAS, который я хочу перевести на R:
if idnat = "french" then do;
if idbp in ("overseas","colony") then idnat2 = "overseas";
else idnat2 = "mainland";
end;
else idnat2 = "foreigner";
run;
Вот моя попытка в R:
if(idnat=="french"){
idnat2 <- "mainland"
} else if(idbp=="overseas"|idbp=="colony"){
idnat2 <- "overseas"
} else {
idnat2 <- "foreigner"
}
Я получаю это предупреждение:
Warning message:
In if (idnat=="french") { :
the condition has length > 1 and only the first element will be used
Мне посоветовали вместо этого использовать "вложенный ifelse
" для его простоты, но я получаю больше предупреждений:
idnat2 <- ifelse (idnat=="french", "mainland",
ifelse (idbp=="overseas"|idbp=="colony", "overseas")
)
else (idnat2 <- "foreigner")
Согласно предупреждающему сообщению, длина больше 1, поэтому учитывается только то, что находится в первых скобках. Извините, но я не понимаю, при чем здесь эта длина? Кто-нибудь знает, где я не прав?