2017-04-21 15 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)