2014-02-28 89 views
5

我有一個CSV文件如何刪除R中的空列?

Identity,Number,Data,Result,Add,,,,,,,,,,,, 
1,,,,4,55,,92,,,,,,,,,62, 
3,,,,7,43,,12,,,,,,,,,74, 
7,,,,3,58,,52,,,,,,,,,64, 
0,,,,6,10,,22,,,,,,,,,96, 
3,,,,8,13,,92,,,,,,,,,22, 

如何刪除中的R空列?

所需的輸出

Identity,Number,Data,Result,Add 
1,4,55,92,62 
3,7,43,12,74 
7,3,58,52,64 
0,6,10,22,96 
3,8,13,92,22 

回答

0

加載數據文件,但不包括標題行:

mydf <- 
read.csv(text='Identity,Number,Data,Result,Add 
1,,,,4,55,,92,,,,,,,,,62, 
3,,,,7,43,,12,,,,,,,,,74, 
7,,,,3,58,,52,,,,,,,,,64, 
0,,,,6,10,,22,,,,,,,,,96, 
3,,,,8,13,,92,,,,,,,,,22,', header=FALSE, skip=1) 

然後加載只是標題行:

n <- read.csv(text='Identity,Number,Data,Result,Add', header=TRUE) 

然後從n使用的名稱爲整個數據指定名稱,不包括NA列:

setNames(mydf[,sapply(mydf, function(x) all(!is.na(x)))],names(n)) 

注意,如果你有這個保存爲一個文件,完整的代碼應該是:

mydf <- read.csv('file.csv', header=FALSE, skip=1) 
n <- read.csv('file.csv', header=TRUE, nrows=1) 
setNames(mydf[,sapply(mydf, function(x) all(!is.na(x)))],names(n)) 
+0

我已經編輯我的問題,現在有在頭的逗號的數量相等爲好,所以基本上它被解讀爲16周的cols代替5,如何解決問題,並感謝您的幫助。 – user3188390

8

後您導入您的數據(使用其他回答者建議的方法)運行此命令,代mydf任何你決定打電話給你的數據幀:

#Remove empty columns 
mydf <- Filter(function(x)!all(is.na(x)), mydf) 
3

轉換向該空單元的NA,然後取出在NAS

mydata[mydata == ""] <- NA 
mydata<- mydata[,colSums(is.na(mydata)) < <a desired filter value>] 
2

如果我們在這種情況下的列數有限,那麼下面的解決方法就會很整齊。

myDF<-myDF[,c(1,2,3,4,5)] 
0

你如何只保留那些名稱不是空白的列?

> mydf <- mydf[,names(mydf)!=""] 
2

一個更復雜的排除邏輯是這樣的:

mydf <- Filter(function(x)!all(is.na(x) || is.null(x) || x == "" || x == 0), mydf)