我有几个具有相同结构的不同 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 文件);等等。
这是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
),并用列表元素的序列号填充。basename()
从文件名中去除路径。