如果不是这样的话

时间:2018-11-14 14:23:49

标签: r var

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

我想要实现的是:

1)对于处理等于“ 混合”的行,我想找到NA,然后;

2a)如果NA不属于 pun1 pun2 之下;

eva3 eva4 的整数必须分别转换/复制为 eva_out1 eva_out2 ,< / p>

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

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 属于同一类别组可能不会转换为另一列。

谢谢!

1 个答案:

答案 0 :(得分:2)

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

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]