将sas if-else语句转换为R

卡尔

我有一个类似于以下逻辑的SAS代码。我想使用if-else或ifelse方法将其转换为R脚本。这是SAS代码示例:

if cat1=1 then do;
 if cat2 eq 'U' then do;
  if var1 =. then var1 = var3;
 end;
 else if cat2='A' then do;
  if var1 =. then var1=var2;
 end;
 end;
else do;
 if cat2 eq 'U' then do;
  if cat3 = 'NC' then do;
   if var1 =. then do;
    if var2 ge 4.0 then var1 =1.15;
   else if var2 le 4.0 then var1 = 10.0;
   else var1 = 6.1;
end;
end;
end;
end;

这是转换后的R脚本代码。但是,最后一步(df4)将覆盖之前的所有步骤。是否有更好的方法将此逻辑转换为R if-else语句。

df <- data.frame(cat1 = c(rep(1,3), rep(0,4)), 
             cat2 = c(rep('U',2), rep('A',3), 'U', 'U'), 
             cat3 = c(rep('NC',2), rep('RF',2), 'NC', 'NC', 'NC'),
             var1 = c(rep(NA,5),.14, NA), 
             var2 = c(rep(NA,2), 4.5, 2.3, 8.5, 3.4, 2.4), 
             var3 = c(rep(2.6, 2), 3.9, NA, 4.2, .012, NA))

df2 <- transform(df,
             var1 = ifelse(is.na(var1) & cat1 ==1 & cat2  == 'U', var3, var1) 
             )
df3 <- transform(df2, 
             var1 = ifelse(is.na(var1) & cat1 ==1 & cat2 == 'A', var2, var1)
             )
df4 <- transform(df3,
             var1 = ifelse(is.na(var1) & cat2 == 'U' & cat3 == 'NC' & var2 >= 4.0, 1.15,
                           ifelse(var2 <= 4.0, 10.0, 6.1))
             )

请帮忙?

财务管理师

我通常会尝试进行“目标分配”,即仅分配到与当前条件匹配的位置。这样,当ifelse我使用未经充分调试的nested修改整个向量时,就可以避免覆盖问题

df$var1[ with(df, is.na(var1) & cat1 ==1 & cat2 == 'U' )] <- df$var3
df$var1[ with(df,(is.na(var1) & cat1 ==1 & cat2 == 'A') ] <- df$var2
df$var1[ with(df, is.na(var1) & cat2 == 'U' & cat3 == 'NC') ] <-
    with( df[ with(df, is.na(var1) & cat2 == 'U' & cat3 == 'NC') , ],
           ifelse( var2 >= 4.0, 1.15,
                           ifelse(var2 <= 4.0, 10.0, 6.1))
         )

我不确定我的逻辑是否正确。我只是将您的R条件语句复制到了选择中。

df

  cat1 cat2 cat3  var1 var2  var3
1    1    U   NC  2.60   NA 2.600
2    1    U   NC  2.60   NA 2.600
3    1    A   RF    NA  4.5 3.900
4    0    A   RF    NA  2.3    NA
5    0    A   NC    NA  8.5 4.200
6    0    U   NC  0.14  3.4 0.012
7    0    U   NC 10.00  2.4    NA

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以将SAS infile语句转换为R代码?

来自分类Dev

将if ... else语句转换为for循环

来自分类Dev

将Lambda函数转换为if else语句

来自分类Dev

将if ... else语句转换为for循环

来自分类Dev

将 if else 转换为 switch 语句

来自分类Dev

将“ where”条件从SAS转换为R

来自分类Dev

将“ where”条件从SAS转换为R

来自分类Dev

将SAS代码转换为R代码

来自分类Dev

如何将这些If else语句转换为Switch语句

来自分类Dev

将guid转换为sas put语句的字符串

来自分类Dev

尝试将if else语句转换为javascript中的三进制

来自分类Dev

尝试将if else语句转换为javascript中的三进制

来自分类Dev

尝试将if else语句转换为javascript中的三进制

来自分类Dev

将PHP if / else语句转换为使用三进制格式

来自分类Dev

PowerShell将if else语句转换为Foreach循环

来自分类Dev

将重复测量的混合模型从SAS转换为R

来自分类Dev

将SAS数字转换为python datetime

来自分类Dev

将EXCEL代码转换为SAS

来自分类Dev

SAS将字符/数字转换为数字

来自分类Dev

试图将if-else语句转换为switch语句,但最终出现错误

来自分类Dev

将shell语句转换为OR

来自分类Dev

将IF语句转换为CASE

来自分类Dev

将shell语句转换为OR

来自分类Dev

将语句转换为联接

来自分类Dev

使用if else条件将SQL UPDATE语句转换为php(codeigniter)

来自分类Dev

如何将多个 else if 语句转换为三元运算符

来自分类Dev

将if语句转换为switch语句

来自分类Dev

将MERGE语句转换为UPDATE语句

来自分类Dev

将数字sas日期转换为熊猫中的datetime