在从现有列创建新列时遇到一些麻烦。
我想要实现的是:
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 == 0
,eva_out2 == 0
,因为成员 pun4 与 pun3 属于同一类别组可能不会转换为另一列。
谢谢!
答案 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]