2017-08-04 17 views
0

我有幾個不同的csv文件具有相同的結構。我使用fread將它們讀入R,然後使用rbindlist()將它們合併成更大的數據集。如何在使用rbindlist時通過一組數據添加索引?

files <- list.files(pattern = "*.csv"); 
x2csv <- rbindlist(lapply(files, fread, stringsAsFactors=FALSE), fill = TRUE) 

該代碼的作品weel。但是,我想添加一個填充數字的列來指示觀察來自哪個csv文件。對於爲例,輸出應該是:

 V1  V2   V3 C1 
    1: 0 0.2859163 0.55848521 1 
    2: 1 1.1616298 0.87571349 1 
    3: 2 2.1122510 0.95062116 2 
    4: 3 2.6832013 0.57095035 2 
    5: 4 2.9117493 0.22854804 2 
    6: 5 2.9886040 0.07685464 3 

其中,C1是新的索引列告知:所述第一和第二觀察來自文件[1](第一.csv文件);第三和第四個觀察來自文件[1](第一個.csv文件);等等。

+0

有一個在'?rbindlist',這個參數'idcol ='我想。 – Frank

回答

4

這是Nicolás' answer的增強版本,增加了文件名,而不是數字:

x2csv <- rbindlist(lapply(files, fread), idcol = "origin") 
x2csv[, origin := factor(origin, labels = basename(files))] 
  • fread()使用stringsAsFactors = FALSE默認情況下,所以我們可以節省一些按鍵
  • fill = TRUE僅在我們要讀取具有不同結構的文件時才需要,例如,不同的位置,名稱或列數
  • 可以命名id col(默認爲.id),並填充list元素的序列號。
  • 然後,這個數字被轉換成一個因子,其等級標有文件名。文件名可能比單純的數字更容易記住。 basename()將文件名刪除。
0

你只失蹤rbindlist()idcol說法。兼營:

x2csv <- rbindlist(lapply(files, fread, stringsAsFactors = FALSE), fill = TRUE, idcol = TRUE) 
相關問題