【问题标题】:For Loop with nested if / else gives incomplete output带有嵌套 if / else 的 For 循环给出不完整的输出
【发布时间】:2018-05-17 08:18:45
【问题描述】:

我正在尝试使用分层标准对数据框列表执行计算。 IE 最好我使用标准 1,但如果不是,则标准 2 很好。如果数据框不满足,则进入标准 3 等。

我想返回 3 个包含 36 个观察值的列表(在我的数据框中)并按我的标准过滤。但是,第 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]))
}
}

提前感谢您提供的任何帮助和建议。

编辑:我已经设法解决了这个问题。 'Categoryx' 旁边的 [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]))
}
}

【问题讨论】:

  • 经过数小时的挫折后,我已经解决了这个问题。上面有一些语法错误。
  • 与其编辑问题的答案,不如将其作为答案发布。 24 小时后,您可以“接受”它,这会将问题标记为已解决。
  • 对不起,新网站
  • 别担心!很好地解决了您自己的问题,感谢您跟进解决方案!

标签: r for-loop if-statement dataframe


【解决方案1】:

胜利!我已经设法解决了这个问题。 'Categoryx' 旁边的 [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]))
}
}

【讨论】:

    猜你喜欢
    • 2018-07-08
    • 1970-01-01
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多