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

时间:2017-08-04 19:29:42

标签: r csv data.table

我有几个不同的csv文件具有相同的结构。我使用fread将它们读入R,然后使用rbindlist()将它们组合成更大的数据集。

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

代码工作正常。但是,我想添加一个填充数字的列,以指示观察来自哪个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文件);等等。

2 个答案:

答案 0 :(得分: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()从文件名中删除路径。

答案 1 :(得分:0)

您只缺少idcol的{​​{1}}参数。运行:

rbindlist()