繁体   English   中英

如果不是这样的话

[英]If else statements to

我在从现有列创建新列时遇到麻烦。

我想要实现的是:

1)对于其中治疗等于“ 混合 ”的行,我要定位的NA,然后;

2a)如果NA在pun1pun2之下;

eva3eva4的整数必须分别转换/复制为eva_out1eva_out2

2b)反之亦然,如果NA在pun3pun4下 ,则;

eva1等于eva_out1 ,其中eva2还将其整数转换为eva_out2

由于二进位组的组成,我们永远不会有eva_out3

一开始我尝试了这个:

df5$eva_out1 <-  with(df5, ifelse(
    (is.na(pun1) | is.na(pun2)) & treatment == "mixed",
    df5$eva_out1 <- eva3,NA ))

这样就完成了大部分工作,但是我不能多次运行,因为其他值将被eva_out2的另一段代码覆盖。

然后我尝试了这个:

  df5$eva_out1 <-  with(df5, ifelse(
  (is.na(pun1) | is.na(pun2)) & treatment == "mixed",
  df5$eva_out1 == eva2 & df5$eva_out2 == eva3, ifelse(
  (is.na(pun3) | is.na(pun4)) & treatment == "mixed",
  df5$eva_out1 == eva1 & df5$eva_out2 == eva2, NA )))

和这个

if(df5$treatment == "mixed") {
} if ( is.na(pun1) | is.na(pun2) ) {
  eva_out1 <- eva3 & eva_out2 <- eva4 
} else if ( is.na(pun3) | is.na(pun4) ) { 
  eva_out1 <- eva1 & eva_out2 <- eva2
} else { 
  eva_out1 <- NULL & eva_out2 <- NULL
} 

但是,要么喷出错误,要么没有给出我需要的结果。 我一直在看函数,但是ifelse()在这种情况下似乎更合法。 如果我错了,请纠正我。

数据的前12行:

.     UniqueSS subject group   part   round  treatment pun1 pun2 pun3 pun4 eva1 eva2 eva3
1        11       1     1 punishment     0 homogenous   NA    0    0    0    0    0    0
2        12       2     1 punishment     0 homogenous    0   NA    0    0    0    0    0
3        13       3     1 punishment     0 homogenous    0    0   NA    0    0    0    1
4        14       4     1 punishment     0 homogenous    0    0    1   NA    0    0    0
5        11       1     1 punishment     1 homogenous   NA    0    0    0    0    0    0
6        12       2     1 punishment     1 homogenous    0   NA    0    0    0    0    0
7        13       3     1 punishment     1 homogenous    0    0   NA    0    0    0    0
8        14       4     1 punishment     1 homogenous    0    0    0   NA    0    0    0
9        11       1     1 punishment     2 homogenous   NA    0    0    0    0    0    0
10       12       2     1 punishment     2 homogenous    0   NA    0    0    0    0    0
11       13       3     1 punishment     2 homogenous    0    0   NA    0    0    0    0
12       14       4     1 punishment     2 homogenous    0    0    0   NA    0    0    0

对于第三行我们将有列eva_out1 == 0eva_out2 == 0 ,因为构件pun4是同一类别组作为PUN3中,并且因此可以不被转换为另一列。

提前致谢!

不确定我是否完全理解,但是这是您的追求吗?

df5$eva_out_1 <- df5$eva_out_2 <- NA

cond1 <- df5$treatment == "mixed" & (is.na(df5$pun1) | is.na(df5$pun2))
df5$eva_out_1[cond1] <- df5$eva3[cond1]
df5$eva_out_2[cond1] <- df5$eva4[cond1]

cond2 <- df5$treatment == "mixed" & (is.na(df5$pun3) | is.na(df5$pun4))
df5$eva_out_1[cond2] <- df5$eva1[cond2]
df5$eva_out_2[cond2] <- df5$eva2[cond2]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM