2017-04-21 84 views
1

我想从两个CSV文件合并特定的列和使用文件名作为列header.In这个例子,我想从每个文件的第三列合并成一个数据框。 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

请给我们您预期的输出。 “使用文件名作为列标题”是什么意思? –

+0

感谢您的评论。我编辑了我的问题。 – Lyndz

+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) 
+0

Sorry.The列名应该是“文件1”,“文件2” – Lyndz

+0

太谢谢你了。我现在明白了! – Lyndz

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) 
相关问题