R:为循环编写代码,将.csv()读入多个数据.frames(),这些数据的对象名与其各自的*.csv文件名相等

R:为循环编写代码,将.csv()读入多个数据.frames(),这些数据的对象名与其各自的*.csv文件名相等,r,csv,dataframe,R,Csv,Dataframe,所以,我已经尝试编写了一段时间了,但看起来R一直在尝试将.csv读入单个data.frame,因为它一直返回“重复行”错误。我需要将每个*.csv作为自己的对象读入数据帧。下面是我尝试过的代码示例;第一个例子是我想要实际实现的一段代码(或类似的代码)。第二个例子是我试图重新编写相同函数的一种粗略方法 #First Example annual.file.names = list.files(pattern = '* Balance Sheet.csv') balance.sheet.read =

所以,我已经尝试编写了一段时间了,但看起来R一直在尝试将.csv读入单个data.frame,因为它一直返回“重复行”错误。我需要将每个*.csv作为自己的对象读入数据帧。下面是我尝试过的代码示例;第一个例子是我想要实际实现的一段代码(或类似的代码)。第二个例子是我试图重新编写相同函数的一种粗略方法

#First Example
annual.file.names = list.files(pattern = '* Balance Sheet.csv')
balance.sheet.read = function(x){
  for (i in 1:length(x)) {
    x[i] = data.frame(read.csv(file = x[i], header = T, row.names = 1, skip 
    = 1, blank.lines.skip = T)) #Name assignment needs fixing
  }
}
balance.sheet.read(annual.file.names) #Duplicate row names error
lapply(annual.file.names, balance.sheet.read)#Duplicate row names error



#Second Example
annual.file.names = list.files(pattern = '* Balance Sheet.csv')
balance.sheet.names = function(x){paste0("'", annual.file.names, "'", ",", 
    collapse = '')} #Copy/Paste below
b.sheet.names = c('names; removed in this example; format = *.csv')
b.sheet.file.namer = function(x) { for (i in 1:length(x)){ 
    return(as.character(b.sheet.names[i]))}}
b.sheet.file.names = b.sheet.file.namer(b.sheet.names)
lapply(b.sheet.names, (map_df(as.list(b.sheet.names), (read.csv(file = 
    b.sheet.file.names , header = T, row.names = 1, skip = 1, 
    blank.lines.skip = T)))))
     #Map_df is from Purrr package 
     #Invalid description error
     #sapply also doesn't work

#Extra Samples
balance.sheet.read(b.sheet.names)#Duplicate row names error
lapply(b.sheet.file.names,balance.sheet.read)#Duplicate row names error
sapply(b.sheet.file.names,balance.sheet.read)#Duplicate row names error

当您执行
list.files()
时,这将为您提供一个以文件名为元素的向量。因此,第一个示例中的问题似乎是您试图将文件
x[1]
强制(读取)为字符向量。相反,您可以使用
assign()

您可以尝试以下方法:

annual.file.names = list.files(pattern = '* Balance Sheet.csv')
for (i in 1:length(annual.file.names)){
   assign(paste0("x",i), read.csv(file = annual.file.names[i], header = T, row.names = 1, skip = 1, blank.lines.skip = T))
}  
编辑:

要将文件名作为新数据帧名称,请执行以下操作:

annual.file.names = list.files(pattern = '* Balance Sheet.csv')
for (i in 1:length(annual.file.names)){
   assign(annual.file.names[i], read.csv(file = annual.file.names[i], header = T, row.names = 1, skip = 1, blank.lines.skip = T))
} 
或者,如果只需要不带
.csv的文件名:

assign(gsub(".csv","",annual.file.names[i]), read.csv(file = annual.file.names[i], header = T, row.names = 1, skip = 1, blank.lines.skip = T))

annual.file.names仍然出现重复的行错误,尽管我采纳了您的建议,为阅读部分编写了这篇更清晰的文章。然而,我也得到了重复的row.name错误,这个
absd=function(x){for(I in 1:length(x)){assign(I,data.frame(read.csv(file=x,header=T,row.names=1,skip=1,blank.lines.skip=T))}lappy(annual.file.names,absd)
我不确定您为什么要使用
lappy
。仅
for loop
就可以读取您的文件,不需要额外的功能。我想我错过了您希望将文件名作为各个数据帧名称的要点。我将相应地更新我的答案