使用rbindlist时如何按数据集添加索引?

Tia*_*tão 1 csv r data.table

我有几个具有相同结构的不同 csv 文件。我使用 fread 将它们读入 R,然后使用rbindlist().

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

代码工作得很好。但是,我想添加一个填充数字的列,以指示观察来自哪个 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
Run Code Online (Sandbox Code Playgroud)

其中 C1 是新的索引列,说明:第一个和第二个观察来自 files[1](第一个 .csv 文件);第三个和第四个观察来自 files[1](第一个 .csv 文件);等等。

Uwe*_*Uwe 7

这是Nicolás 答案的增强版本,它添加了文件名而不是数字:

x2csv <- rbindlist(lapply(files, fread), idcol = "origin")
x2csv[, origin := factor(origin, labels = basename(files))]
Run Code Online (Sandbox Code Playgroud)
  • fread()stringsAsFactors = FALSE默认使用,所以我们可以节省一些按键
  • fill = TRUE仅当我们想要读取具有不同结构的文件时才需要,例如,不同的位置、名称或列数
  • id col 可以被命名(默认为.id),并用列表元素的序列号填充。
  • 然后,这个数字被转换成一个因子,其级别用文件名标记。文件名可能比单纯的数字更容易记住。basename()从文件名中去除路径。