R If then do - 如何根据条件创建变量

Posted

技术标签:

【中文标题】R If then do - 如何根据条件创建变量【英文标题】:R If then do - how to create variables based on the condition 【发布时间】:2021-06-07 19:47:50 【问题描述】:

作为一名敬业的 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 还有其他方法吗?

【问题讨论】:

【参考方案1】:

你可以使用 ifelse base 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

【讨论】:

【参考方案2】:

你不需要嵌套 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

【讨论】:

以上是关于R If then do - 如何根据条件创建变量的主要内容,如果未能解决你的问题,请参考以下文章

如何根据 if-then 决策树设置 ruby​​ 变量

如何根据R中的条件创建新变量

使用带有变量的 If Then 运行不同的 SQL 语句

case when then 根据不同条件 查询不同的数据 相当于 if-else if-else

R:根据OR条件创建具有多个级别的新变量[重复]

shell2