2014-07-05 19 views
1

我在一个文件夹中有几个csv文件。每个文件都代表一个参与者的数据。我正在尝试创建一个函数来打开所有文件并将它们放入一个数据框中。对于第一个文件,函数应该读取标题,但不能读取其他文件。我试过这个:打开几个csv,并把它们放在一个数据框中

files<-list.files(path="D:/r") 
for(i in 1:length(files)){ 
if(i==1){ 
    matriz<-read.csv(files [i], header=TRUE) 
}else{ 
    tmp<-read.csv(files[i],header=FALSE) 
    matriz<-rbind(matrix,tmp) 
} 
} 

但是,它没有工作......任何想法?谢谢!

+0

并以“不工作”的单一数据帧简单而快速的方式,你的意思究竟是什么? – MrFlick

+0

我得到以下错误:rep(xi,length.out = nvar)中的错误: 尝试复制'closure'类型的对象 – unomas83

+0

然后,这很可能是因为您在'rbind中键入了'matrix'而不是'matriz' '。 – MrFlick

回答

1

获取您的列名称当i==1并将它们分配到tmp,因此您可以rbind()

setwd("") # your path here 
files <- list.files() 
for (i in 1:length(files)) { 
    if (i==1) { 
    matriz <- read.csv(files[i], header=TRUE) 
    cname <- names(matriz)  # get column names when reading in header 
    } else { 
    tmp <- read.csv(files[i], header=FALSE) 
    names(tmp) <- cname   # assign column names so you can bind 
    matriz <- rbind(matriz,tmp) # change error in matrix/z 
    } 
} 
+0

埃里克,非常感谢。该代码有效,但它给出了每个参与者列的名称,我不希望这样。我想要的是将最后19个参与者的数据帧合并到第一个参与者的数据框中。因此,该指令应只读取第一个参与者的列名。 – unomas83

+0

我不关注,@ unomas83。该代码只获取头文件并在'i == 1'时定义'cname'。在后续运行中,'tmp'不带标题,'R'分配新的变量名称。你想''将''tmp''转换为'matriz',所以我们运行'names(tmp)'以确保'tmp'具有相同的列名。我认为它应该做你想要的。你可能会考虑分享一些不起作用的截图。 –

+0

再次感谢,埃里克。正如你在下面的输出中看到的那样,它给了我每个参与者列的名称![Valid XHTML](http://subefotos.com/ver/?2cffd4fbec7aa0d1c05068ff3848a808o.jpg)。 – unomas83

0

我有一个类似的错误,当我没有定义我绑定的矩阵。

例如: DF < - data.frame(变量=字符()中,x =数字(),stringsAsFactors = FALSE)

的如果运行之前。

for(i in 1:3000){ 

filename<- paste(c("Aone.txt.", i), collapse = "") 
x <- read.table(filename, header=TRUE, sep=" ", row.names = NULL) 
df<- rbind(df,x)  
print(i) 
print(nrow(df)) 
} 
+1

这不提供问题的答案。您可以搜索类似的问题,或者参考页面右侧的相关和链接问题来查找答案。如果您有一个相关但不同的问题,请提出一个新问题,并附上一个链接以帮助提供上下文。由于您的信誉低,请不要发表评论作为答案。 – Sneha

1

这里是读取多个数据帧,然后装订成使用fread

# Load library 
    library(data.table) 

# Get a List of all files named with a key word, say all `.csv` files 
    filenames <- list.files("C:/your/folder", pattern="*.csv", full.names=TRUE) 

# Load and bind all data sets 
    data <- rbindlist(lapply(filenames,fread)) 
相关问题