2017-05-08 66 views
1

如何取消列出並打開csv文件?取消列出多個csv文件

我在一個目錄中有很多csv文件。它們都有兩列和不等數量的行。我做了使用

list.files(pattern=".csv$") # use the pattern argument to define a common pattern for import files with regex. Here: .csv 

list.filenames<-list.files(pattern=".csv$") 

list.data<-list() 

for (i in 1:length(list.filenames)) 
{ 
    list.data[[i]]<-read.csv(list.filenames[i]) 
} 


names(list.data)<-list.filenames 

的數據看起來像下面的列表:

$`xxx-xxx.csv` 
    PositionX Value 
1   2 -107.068 
2   6 -35.074 
... 
$`xxx1-xxx1.csv` 
    PositionX Value 
1   2 -9.230 
2   6 -9.230 
... 

有成千上萬的上述格式的CSV文件。我只是想把它們綁在一起,沒有標題。例如,我想有:

PositionX Value 
1   2 -107.068 
2   6 -35.074 
3   2 -9.230 
4   6 -9.230 

我已經嘗試以下解決方案:

big.list.of.data.frames <- lapply(list.data, function(x){ 
+  read.table(x, skip = 3, header = TRUE, stringsAsFactors = FALSE) 
+ }) 

我得到如下:

Error in read.table(x, header = TRUE, stringsAsFactors = FALSE) : 
    'file' must be a character string or connection 

我也曾嘗試

myMergedData <- do.call(rbind,list.data) 

我得到錯誤:

Error in rbind(deparse.level, ...) : 
    numbers of columns of arguments do not match 

我已經確保我所有的csv文件都有2列。

+3

'do.call(rbind,list.data)' –

+0

已經嘗試過,我得到 '錯誤rbind(deparse.level,...): 數的參數列不匹配' – Jamil

+0

然後列表中所有元素的列數都不相同。檢查'str(list.data)'確保所有元素只有兩列。 –

回答

0

使讀取CSV文件的列表:

list.data <- Map(read.csv, list.files(pattern=".csv$")) 

檢查,如果它們都具有兩列:

all(sapply(list.data, ncol)==2) 

如果這不是TRUE然後調查哪些文件有多於或少於2列:

which(sapply(list.data, ncol)!=2) 

否則按照評論中的建議組合:

do.call(rbind, list.data) 
+0

我得到'match.names(clabs,names(xi))中的錯誤: 名稱與以前的名稱不匹配' – Jamil

+0

這意味着您的文件具有不同的標頭(變量名稱)。 你得到第二行(用'所有(')返回TRUE;? –

+0

是我得到的所有(sapply(list.data,NcoI位)== 2) [1] TRUE > >其中( sapply(list.data,ncol)!= 2) named integer(0) – Jamil