2014-01-15 164 views
1

我有一個從excel csv導入的數據框。這個工作到目前爲止,然而csv總是保存49'999行,即使只有大約10'000行數據。其餘的行都是空的。從Excel中創建的csv文件中刪除空行

如何才能選擇現在僅包含至少包含一列數據的那部分數據?與一行我設法做到這一點:

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,] 

不subset..but爲什麼?

回答

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)內會給你真與至少與數據一列的行。其餘的都是假的,所以他們不被採取。

另外,從Excel創建csv文件時,可以嘗試刪除數據右側的所有列,因爲它也可以人爲創建虛幻數據列。這也可以刪除底部的空白行。

+0

沒有完成的情況下只查找完整的行嗎?但我不希望這樣,因爲有些列比其他列早一些完成。我想要的行至少和只有至少!一列包含數據。只要沒有列包含數據,文件就完成了。 – MichiZH

+0

@MichiZH,我改正了答案。 –

+0

嗨,謝謝你的詳細回覆。不知何故,它根本不是它的子集。我不知道爲什麼,即使這些行完全是空的(和所有字符),我已經用你的建議na.strings = c(「NA」,「」)試過了,然後用這個:data2 <-data [ sum(!is.na(data))> 0,],但仍未創建子集 – MichiZH