【发布时间】:2017-11-29 20:13:26
【问题描述】:
我正在尝试根据某些列是否为空,从一长串数据框中选择数据框。
这是一个可重现的示例,以及我为尝试解决此问题而编写的代码。我正在使用一个随机变量作为另一个随机变量的可接受替代品(这里,b 代表 c),所以如果 df1 a 最终同时出现在第 1 组和第 2 组中,我不会感到困扰。
d1 <- data.frame(a=rnorm(5), b=1:5, c=rnorm(5))
d2 <- data.frame(a=1:5, b=rnorm(5), c = c(NA, NA, NA, NA, NA))
d3 <- data.frame(a=1:5, b=c(NA, NA, NA, NA, NA), c=c(1:5))
my_test_data <- list(d1, d2, d3)
group_1 <- list()
group_2 <- list()
for (i in 1:length(my_test_data)) {
if(!is.nan(my_test_data[[i]]$b)) {
group_1[i] <- my_test_data[i]
}
else if (!is.nan(my_test_data[[i]]$c)) {
group_2[i] <- my_test_data[i]
}
else NULL
}
我收到警告消息说:
警告信息: 1: 在 if (!is.nan(my_test_data[[i]]$b)) { : 条件的长度 > 1 并且只使用第一个元素
组 1 和组 2 与 my_test_data 相同
非常感谢所有帮助。
【问题讨论】:
-
is.nan或is.na测试整个向量并返回列长度相同的向量,例如检查is.na(d2$c)的输出 -
谢谢你 - 所以这种方法行不通。您对我如何做到这一点有什么建议吗?
标签: r list for-loop if-statement