【发布时间】: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