如果 else 语句
If else statements to
我在从现有列创建新列时遇到了一些问题。
我要实现的是:
1) 对于 treatment 等于“mixed” 的行,我想找到 NA,然后;
2a) 如果 NA 在 pun1 或 pun2 下,则;
eva3和eva4的整数必须是converted/copied到eva_out1和eva_out2,分别是
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 因此可能无法转换为另一列。
提前致谢!
不确定我是否完全理解,但这就是您想要的吗?
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]
我在从现有列创建新列时遇到了一些问题。
我要实现的是:
1) 对于 treatment 等于“mixed” 的行,我想找到 NA,然后;
2a) 如果 NA 在 pun1 或 pun2 下,则;
eva3和eva4的整数必须是converted/copied到eva_out1和eva_out2,分别是
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 因此可能无法转换为另一列。
提前致谢!
不确定我是否完全理解,但这就是您想要的吗?
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]