2017-05-08 61 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