R 打开多个csv并将其放入数据框中
我在一个文件夹中有几个csv文件。每个文件代表一个参与者的数据。我试图创建一个函数来打开所有文件并将它们放在一个数据帧中。对于第一个文件,函数应该读取头文件,而不是其他文件。我试过这个:R 打开多个csv并将其放入数据框中,r,csv,R,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],
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)
}
}
文件在i==1时获取列名,并将它们分配给tmp
,这样您就可以rbind()
setwd(“”)#您在这里的路径
文件当我没有定义绑定到的矩阵时,我遇到了类似的错误
例如:
df这里有一种简单快速的方法,可以读取多个数据帧,并使用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))
#加载库
库(数据表)
#获取用关键字命名的所有文件的列表,例如所有“.csv”文件
文件名和“不起作用”的确切含义是什么?我得到了以下错误:rep中的错误(xi,length.out=nvar):尝试复制“closure”类型的对象,这可能是因为您在rbind
中键入了矩阵而不是matriz
。这是真的,但仍然不起作用。。。现在我得到了以下错误:rep中的错误(xi,length.out=nvar):尝试复制“closure”类型的对象……好吧,我不知道您正在运行什么代码了。但是这个错误可能意味着你正在使用一个函数名,其中R需要一个原子值变量。Eric,非常感谢。这段代码是有效的,但它给出了每个参与者的列名称,我不希望这样。我想要的是将最后19个参与者的数据帧合并到第一个参与者的数据帧中。因此,指令应该只为第一个参与者读取列的名称。我不明白,@unomas83。当i==1
时,代码仅获取标题并定义cname
。在随后的运行中,tmp
不带标题进入,并且R
分配新的变量名。您希望rbind()
tmp
到matriz
,因此我们运行names(tmp)
以确保tmp
具有相同的列名。我认为它应该完全符合你的要求。你可以考虑分享一些不工作的截图。再次感谢,埃里克。正如您在下面的输出中所看到的,它为我提供了每个参与者的列名!。你的其他文件有标题吗?我假设没有,因为您指定了headers=FALSE
。如果其他文件有标题,请将else
中的代码更改为headers=TRUE
。names(tmp)Eric,非常感谢。现在可以了!是的,所有文件都有标题,因为它们是由软件自动生成的每个参与者的数据。现在,我将尝试理解函数实际在做什么,但它工作得非常完美。再次感谢这并不能回答这个问题。您可以搜索类似的问题,或参考页面右侧的相关和链接问题以查找答案。如果您有一个相关但不同的问题,请提出一个新问题,并包括一个指向此问题的链接,以帮助提供上下文。请不要发表评论作为回答,因为你的声誉很低。
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))
}
# 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))