我需要检查数据帧是否为“空”(在数据帧包含零有限值的意义上为“空”。如果存在有限值和非有限值的混合,则为不应被视为“空”)
参考How to check a data.frame for any non-finite,我想出了一个几乎可以达到这个目标的行代码
nrow(tmp[rowSums(sapply(tmp, function(x) is.finite(x))) > 0,]) == 0
其中tmp是一些数据帧。
此代码适用于大多数情况,但如果数据框包含单行,则会失败。
例如,上面的代码适用于
tmp <- data.frame(a=c(NA,NA), b=c(NA,NA)) OR tmp <- data.frame(a=c(3,NA), b=c(4,NA))
但不是,
tmp <- data.frame(a=NA, b=NA)
因为我认为rowSums至少需要两行
我查了一些其他帖子,例如https://stats.stackexchange.com/questions/6142/how-to-calculate-the-rowmeans-with-some-single-rows-in-data,但我仍然无法找到解决问题的方法。
我的问题是,是否有任何干净的方法(即避免使用循环,理想情况下是一个班轮)来检查任何数据帧的“空”?
由于
答案 0 :(得分:2)
如果要检查所有列,则可以执行
all(sapply(tmp, is.finite))
我们使用all
而不是rowSums
技巧,因此我们不必担心保留矩阵。