首页 > 解决方案 > 在R中读取许多csv文件时添加与原始文件对应的列

问题描述

我正在将列表中的 csv 文件读入一个数据集中,使用

x <- do.call(rbind, lapply(list, fread))

我想添加一列,x其中指示与每一行对应的文件的名称。

list看起来像这样:

[[1]] '~/amsterdam.csv'
[[2]] '~/atlanta.csv'
[[3]] '~/bangalore.csv'

我想x看起来像这样

 V1   V2           city
2.5   3.4   '~/amsterdam.csv'
5.4   1.1   '~/bangalore.csv'
3.4   2.9   '~/atlanta.csv'
0.5   9.8   '~/bangalore.csv'

有没有办法使用我使用的命令将 x 的每一行链接到它所源自的文件?

我目前正在使用循环来执行此操作(读取文件,然后添加与文件名对应的列,然后将所有文件绑定在一起),但我想知道是否有更快更清洁的方法来做到这一点。

标签: rcsvfread

解决方案


如果您使用的是data.tabletryrbindlist而不是 .您可以使用参数do.call(rbind...添加一个新列,该参数将为每个数据帧提供一个索引,稍后可以从. 另请注意,这是 R 中的内部函数,最好避免将其用作变量名。Cityidcollistlist

library(data.table)

x <- rbindlist(lapply(list, fread), idcol = "City")
x[, City := basename(list)[City]]

推荐阅读