我有一个从excel csv导入的数据帧。到目前为止这是有效的,但是csv总是保存49'999行,即使只有大约10'000行数据。其余的行都是空的。
如何现在只选择包含至少一列数据的数据框的那一部分?我设法做了一行:
MyDF[length(MyDF[MyDF!=""])>0]
但是我怎样才能为整个数据帧做到这一点?我想将“子数据帧”分配给新的数据帧。
编辑示例数据:
很简单的例子:
data<-matrix(c(1,2,1,NA,NA,NA),nrow=3,ncol=2,byrow=TRUE)
[,1] [,2]
[1,] 1 2
[2,] 1 NA
[3,] NA NA
data2<-data[sum(!is.na(test))>0,]
没有子集......但是为什么?
答案 0 :(得分:2)
当读取在Excel中创建的此类数据时,您必须处理NA
和""
,具体取决于列是被识别为数字还是被R识别为字符/因子。或者,您可以在阅读数据时添加选项na.strings = c("NA", "")
,因此所有空白都将为NA,您无需关注""
。
newdata = data[!apply(is.na(data) | data == "", 1, all), ]
对于至少有一列包含数据的行,!apply(is.na(data) | data == "", 1, all)
内部将为TRUE。其余的都是假的,所以不会被带走。
此外,从Excel创建csv文件时,您可以尝试删除数据右侧的所有列,因为它还可以人为地创建ghost数据列。这也可以删除底部的空白行。