带有嵌套if/else的For循环给出不完整的输出

带有嵌套if/else的For循环给出不完整的输出,r,for-loop,if-statement,dataframe,R,For Loop,If Statement,Dataframe,我试图使用层次标准对数据帧列表执行计算。IE我最好使用标准1,但如果不使用,则标准2可以。如果数据帧不满足任何一个条件,则转到标准3,以此类推 我想返回3个36个观察值的列表(在我的数据框中为nrow),并根据我的标准进行筛选。然而,无论是第1类还是第2类都没有得到36个观察结果。为什么会这样 以下是一个可复制的示例: #dummy data d1 <- data.frame(a=rnorm(6), b=1:6, c=rnorm(6), d = rnorm(6), e = rnorm(6

我试图使用层次标准对数据帧列表执行计算。IE我最好使用标准1,但如果不使用,则标准2可以。如果数据帧不满足任何一个条件,则转到标准3,以此类推

我想返回3个36个观察值的列表(在我的数据框中为nrow),并根据我的标准进行筛选。然而,无论是第1类还是第2类都没有得到36个观察结果。为什么会这样

以下是一个可复制的示例:

#dummy data

d1 <- data.frame(a=rnorm(6), b=1:6, c=rnorm(6), d = rnorm(6), e = rnorm(6))
d2 <- data.frame(a=1:6, b=rnorm(6), c =rnorm(6), d = rnorm(6), e = rep(NA, 
times = 6))
d3 <- data.frame(a=1:6, b=rnorm(6), c= rnorm(1:6), d = rep(NA, times = 6), e 
= rnorm(6))
d4 <- data.frame(a=1:6, b=rnorm(6), c =rnorm(6), d = rnorm(6), e = rep(NA, 
times = 6))
d5 <- data.frame(a=rnorm(6), b=1:6, c=rnorm(6), d = rep(NA, times = 6), e = 
rnorm(6))
d6 <- data.frame(a=rnorm(6), b=1:6, c=rnorm(6), d = rep(NA, times = 6), e = 
rep(NA, times = 6))

my_test_data <- list(d1, d2, d3, d4, d5, d6)
test_data_rows <- rbind.fill(my_test_data)

#seperate into categories

Category1 <- list()
Category2 <- list()
Category3 <- list()

for (i in 1:NROW(test_data_rows)) {
if (!is.na(test_data_rows$e[i] == TRUE)) {
Category1[i] <- test_data_rows$e[i]*test_data_rows$c[i]*(test_data_rows$b[i] 
/ test_data_rows$a[i])
} else if (!is.na(test_data_rows$d[i] == TRUE) & is.na(test_data_rows$e[i]) 
== TRUE) {
Category2[i] <- (0.432 * test_data_rows$d[i] * (test_data_rows$b[i] / 
test_data_rows$a[i]))
} else if (is.na(test_data_rows$d[i] == TRUE) & is.na(test_data_rows$e[i] == 
TRUE)) {
Category3[i] <- (0.101 * 0.432*(test_data_rows$b[i] / test_data_rows$a[i]))
}
}
#虚拟数据

d1胜利!我已经设法解决了这个问题。“类别”旁边的[i]的位置是错误的。此外,不需要使用多个类别

for (i in 1:NROW(test_data_rows)) {
if (!is.na(test_data_rows$e[i] == TRUE)) {
Category1[i] <- test_data_rows$e[i]*test_data_rows$c[i]*(test_data_rows$b[i] 
/ test_data_rows$a[i])
} else if (!is.na(test_data_rows$d[i] == TRUE) & is.na(test_data_rows$e[i]) 
== TRUE) {
Category1[i] <- (0.432 * test_data_rows$d[i] * (test_data_rows$b[i] / 
test_data_rows$a[i]))
} else if (is.na(test_data_rows$d[i] == TRUE) & is.na(test_data_rows$e[i] == 
TRUE)) {
Category1[i] <- (0.101 * 0.432*(test_data_rows$b[i] / test_data_rows$a[i]))
}
}
for(i in 1:NROW(测试数据行)){
如果(!is.na(测试数据行$e[i]==TRUE)){

类别1[i]经过几个小时的挫折,我已经解决了这个问题。上面有一些语法错误。与其在你的问题中编辑答案,不如将其作为答案发布。24小时后你可以“接受”这将标志着问题已解决。抱歉,新到的网站没有担心!很好地解决了您自己的问题,并感谢您跟进解决方案!
for (i in 1:NROW(test_data_rows)) {
if (!is.na(test_data_rows$e[i] == TRUE)) {
Category1[i] <- test_data_rows$e[i]*test_data_rows$c[i]*(test_data_rows$b[i] 
/ test_data_rows$a[i])
} else if (!is.na(test_data_rows$d[i] == TRUE) & is.na(test_data_rows$e[i]) 
== TRUE) {
Category1[i] <- (0.432 * test_data_rows$d[i] * (test_data_rows$b[i] / 
test_data_rows$a[i]))
} else if (is.na(test_data_rows$d[i] == TRUE) & is.na(test_data_rows$e[i] == 
TRUE)) {
Category1[i] <- (0.101 * 0.432*(test_data_rows$b[i] / test_data_rows$a[i]))
}
}