我在一个文件夹中有几个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 :(得分: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
}
}
答案 1 :(得分: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))
答案 2 :(得分:0)
当我没有定义我绑定的矩阵时,我遇到了类似的错误。
例如: df&lt; - data.frame(variable = character(),x = numeric(),stringsAsFactors = FALSE)
在运行if。之前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))
}