所以,我一直试图对此进行编码一段时间,但看起来R一直试图将read.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
答案 0 :(得分:0)
当您执行list.files()
时,这将为您提供一个文件名为元素的向量。因此,您的第一个示例中的问题似乎是您试图将文件x[1]
强制(读取)到字符向量中。相反,您可以循环浏览文件名,然后使用x1
x2
,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))
答案 1 :(得分:0)
annual.file.names <- list.files(pattern = '* Balance Sheet.csv')
listDFs <- lapply(annual.file.names, read.csv)
combDFs <- do.call("rbind", listDFs)
您可以将每个文件读入data.frames列表,然后使用do.call
将数据框绑定在一起并创建一个组合的data.frame。