【发布时间】:2018-07-08 10:28:11
【问题描述】:
如果之前有人问过这个问题,我很抱歉。我检查了许多关于在 for 循环中使用 if-else 的问题,但无济于事。我一定是误解了答案。我已经多次编辑我的代码以避免不同的致命错误和/或意外输出(包括没有更改和/或仅评估 else 语句)。
我希望循环做什么: 检查A列是否为负值,B列是否等于2。如果两个条件都为真,则在C列中输入0;否则,将 B 列中的值原样复制到 C 列。 最终,我也想做相反的事情 - 当 A 列为负时,将 0 换成 2。
谢谢!
condition = c(0,1,2)
ppt1 = sample(condition, 124, replace = T)
ES = rnorm(n = 124)
key = as.data.frame(cbind(ES,ppt1))
key$recoded = rep(NA, 124)
这会创建一个像这样的所需输入:
key[1:6,]
ES ppt1 recoded
1 -0.1893987 0 NA
2 -0.3840249 2 NA
3 0.7405880 2 NA
4 -1.1683384 0 NA
5 0.6675387 0 NA
6 0.3662369 2 NA
这是我的两次 ifelse 尝试:
for(i in nrow(key)){
ifelse((key$ES[i] < 0) && (key$ppt1[i] == 2),key$recoded[i] == 0,key$recoded[i] == key$ppt1[i])
}
for (i in 1:nrow(key)) {
if(key$ES[i] < 0 && key$ppt1 == 2) {
key$recoded[i] == 0
} else {
key$recoded[i] == "key"
}
}
期望的结果是这样的:
key[1:6,]
ES ppt1 recoded
1 -0.9729880 0 2
2 0.5695559 1 1
3 1.1376975 2 2
4 0.8132510 2 2
5 0.8482997 1 1
6 -0.9434207 2 0
看看在第 1 行和第 6 行中,$recoded 列如何交换了 0 和 2。
【问题讨论】:
-
如果您向reproducible example 提供可用于测试和验证可能解决方案的示例输入和所需输出,则更容易提供帮助。使用随机函数时使用
set.seed(),这样我们可以获得与您相同的值。 -
@MrFlick 我添加了一个期望结果的示例。我无法 set.seed 工作。我在运行 ppt1 = sample(condition, 124, replace = T) 之前尝试了 set.seed(5) 并不断得到不同的数字。
标签: r for-loop if-statement