我仍在学习如何将 SAS 代码翻译成 R,但我收到了警告。我需要了解我在哪里犯了错误。我想要做的是创建一个变量来总结和区分人口的 3 种状态:大陆、海外、外国人。我有一个包含 2 个变量的数据库:
- 身份证国籍:(
idnat
法国,外国人),
如果idnat
是法语,那么:
- 身份证出生地:(
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
这是我想用 R 翻译的 SAS 代码:
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,因此只考虑第一个括号之间的内容。对不起,但我不明白这个长度与这里有什么关系?有人知道我错在哪里吗?