作为一名专门的 SAS 用户,我很难理解 R 中的 if-then 逻辑。
假设我有以下数据框:
test<-data.frame("year" = c(2018, 2019),
"var1"=c(1,2),
"var2"=c(3,4),
"var3"=c(5,6),
"var4"=c(7,8),
"var5"=c(9,10),
"var6"=c(11,12))
现在,我想通过以下方式创建两个附加变量:
如果年份是 2018 则 extra_var1=var1+var2, extra_var2=var2+var3 如果年份是 2019 则 extra_var1=var4+var5, extra_var2=var5+var6
在 SAS 我会这样做:
data test;
set test;
if year=2018 then do;
extra_var1=var1+var2;
extra_var2=var2+var3;
end;
if year=2019 then do;
extra_var1=var4+var5;
extra_var2=var5+var6;
end;
run;
如何在 R 中做到这一点?除了嵌套 ifelse 之外还有其他方法吗?
您可以使用 ifelse 基 r 函数
var = ifelse(test, yes, no)
你可以做一些嵌套语句
ifelse(test1, yes,
ifels(test2,yes,no))
attach(test)
test$extra_var1 =
ifelse(test$year == 2018,test$var1 + test$var2,
ifelse(test$year == 2019,test$var4 + test$var5,NA))
test$extra_var2 =
ifelse(test$year == 2018,test$var2 + test$var3,
ifelse(test$year == 2019,test$var5 + test$var6,NA))
这给了你的情况
year var1 var2 var3 var4 var5 var6 extra_var1 extra_var2
1 2018 1 3 5 7 9 11 4 8
2 2019 2 4 6 8 10 12 18 22
您不需要嵌套的 if 命令。
if (test$year == 2018)
{
test$extra_var1 <- test$var1 + test$var2
test$extra_var2 <- test$var2 + test$var3
}
if (test$year == 2019)
{
test$extra_var1 <- test$var4 + test$var5
test$extra_var2 <- test$var5 + test$var6
}
给出:
year var1 var2 var3 var4 var5 var6 extra_var1 extra_var2
1 2018 1 3 5 7 9 11 4 8
2 2019 2 4 6 8 10 12 6 10
其实,上面的答案是错误的。 它会产生错误 Error in if (test$year == 2019) { : the condition has length > 1
如果使用 ifelse 则错误为 Error in ifelse(test$year == 2018) : 缺少参数“yes”,没有默认值
谁能解释一下吗?