我有一个包含许多csv文件的文件夹。每个csv文件具有相同的列数。我想结合它们创建一个文件名列。我已经看过类似的帖子,但我无法让它发挥作用。我正在尝试以下脚本。任何帮助将不胜感激
library(plyr)
csvfilenames <- list.files("/Users/PAM/Desktop/CSVFilesToMerge/",
pattern="*.csv", all.files=FALSE, full.names=FALSE)
csvfilenames
library(plyr)
CombinedData = ldply(csvfilenames, function(filename) {
dum = read.table(filename, header=TRUE, fill = TRUE, sep=";")
dum$Filename = csvfilenames
return(dum)
})
CombinedData`
这是我对purrr的下一次尝试,但它不起作用
library(readr) # for read_csv()
library(purrr) #for map(), reduce()
data_path<-"/Users/PAM/Desktop/TestCSVFilesToMerge/"
files <- dir(data_path, pattern = "*.csv") # get file names
files
data <- files %>% # read in all the files, appending the path before the filename
map(~ read_csv(file.path(data_path, .))) %>%
reduce(rbind)
data
答案 0 :(得分:0)
这应该可以满足您的需求,
csvfilenames <- list.files("/Users/PAM/Desktop/CSVFilesToMerge/",
pattern="*.csv", all.files=FALSE, full.names=FALSE)
for(i in 1:length(csvfilenames))
{
temp<-read.csv(paste(csvfilenames[i])) #give path if its not your wd
temp$filename_tag<-paste(csvfilenames[i])
list[[i]]<-temp
}
outfile<-as.data.frame(do.call(rbind,list))
答案 1 :(得分:0)
我设法让它发挥作用。但是,我想知道是否有人可以帮我清理一下脚本。此脚本还会转置数据,因此我必须手动删除所有创建的额外行(每列一个)。我认为当我在数据框中转换列表时,问题出现在脚本的最后一行。
csvfilenames <- list.files("/Users/carlos/Desktop/TestCSVFilesToMerge/",
pattern="*.csv", all.files=FALSE, full.names=FALSE) #creates a list with the file names
csvfilenames
for(i in 1:length(csvfilenames))
{
a=csvfilenames[i]
temp1<-read.csv(file=paste("/Users/carlos/Desktop/TestCSVFilesToMerge/",a,sep=""),sep=";", header=T)
temp2<-cbind("FileName"=a,temp1[,1:ncol(temp1)]) #add a column called FileName in position 1
list[[i]]<-temp2
}
outfile<-as.data.frame(do.call(rbind,list))
outfile
答案 2 :(得分:0)
类似于上述情况,我有2个已读取的csv文件 CSV1:
2016 2016 2017 2017 2018 2018年
值%vs. PY值%vs. PY值%vs. PY
数据1 2018-09 23663 2,757 5.7%
Data2 2018-08 7687686 15.1%
Data2 2018-09 987987 15.2%
CSV2: 2016 2016 2017 2017 2018 2018年 值%vs. PY值%vs. PY值%vs. PY Data1 2018-09 456 3000 4%
我也想添加文件名作为列名。 我使用以下:
x1= read.csv(choose.files(),F,"\t", skipNul = FALSE)
x2= read.csv(choose.files(),F,"\t", skipNul = FALSE)
merged_files= do.call(rbind, list(x1= x1, x2= x2))
,但在每行中加x1。 CNA有人帮忙吗? 我尝试使用上面的代码,但在文件(文件,“ rt”)中给我错误: 无法打开文件。