我想合并两个csv文件中的特定列,并使用文件名作为列标题。在此示例中,我想将每个文件中的第三列合并为一个数据框。 csv文件具有相同的行数和列数。
示例数据集:
File1.csv
V1,V2,V3,V4
1,1986,64,61
File2.csv
V1,V2,V3,V4
1,1990,100,61
预期结果:
"File1","File2"
64,100
这是我的剧本:
my.file.list <- list.files(pattern = "*.csv")
my.list <- lapply(X = my.file.list, FUN = function(x) {
read.csv(x, header=TRUE,colClasses = c("NULL", "NULL", "numeric", "NULL"), sep = ",")[,1]
})
my.df <- do.call("cbind", my.list)
如何根据文件名添加列标题?
我试过了:
sub('.csv','',basename(my.file.list),fixed=TRUE)
但我不知道如何将其添加为标题。
我会感激任何帮助。
答案 0 :(得分:1)
my.file.list <- list.files(pattern = "*.csv")
my.list <- list()
for (i in 1:length(my.file.list)) {
df <- read.csv(my.file.list[[i]], header=TRUE, sep=",")["V3"]
names(df) <- paste0("FILE", i)
my.list[[i]] <- df
}
my.df <- do.call("cbind", my.list)
答案 1 :(得分:0)
@Tim Biegeleisen非常感谢你的帮助。我现在明白了。这是我可以用于具有不同文件名的文件的答案的改进版本。
my.file.list <- list.files(pattern = "*.csv")
my.list <- list()
for (i in 1:length(my.file.list)) {
df <- read.csv(my.file.list[[i]], header=TRUE, sep=",")["V3"]
names(df) <-paste0(sub('.csv','',basename(my.file.list[i]),fixed=TRUE), i)
my.list[[i]] <- df
}
my.df <- do.call("cbind", my.list)