可能重复:
When importing CSV into R how to generate column with name of the CSV?
我收到了一些我想要加载到单个数据框中的文件。我正在阅读的每个文件都具有相同的结构,但行数不同。假设每个文件代表一个参与者,我知道我可以使用下面的代码阅读它们:
files <- c("john.csv","fred.csv","nick.csv","alex.csv")
library(plyr)
dfoc <- ldply(files, read.csv, header = T)
现在,我希望能够识别哪些行属于哪个参与者。我想在将它们读入大数据帧之前为每个文件添加一个列。我要添加的列将具有等于特定参与者nrow(john)
的行数的行数。我添加的列应该只包含一个标识符,例如重复nrow(x)
次的文件名。
有什么建议吗?
答案 0 :(得分:3)
这是我要做的。 (关键的想法是将id
列的值和刚读入的data.frame放在一起调用data.frame()
.R的回收规则将生成id
列在每种情况下都有正确的长度。)
## Set up a reproducible example
a <- tempfile()
b <- tempfile()
write.csv(head(mtcars, 2), file=a)
write.csv(tail(mtcars, 3), file=b)
fnames <- c(a,b)
## Here's the code you are looking for
do.call(rbind, lapply(fnames, function(X) {
data.frame(id = basename(X), read.csv(X))})
)
# id X mpg cyl disp hp drat wt qsec vs am gear carb
# 1 file104862dd45aa Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
# 2 file104862dd45aa Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# 3 file1048d9e5764 Ferrari Dino 19.7 6 145 175 3.62 2.770 15.50 0 1 5 6
# 4 file1048d9e5764 Maserati Bora 15.0 8 301 335 3.54 3.570 14.60 0 1 5 8
# 5 file1048d9e5764 Volvo 142E 21.4 4 121 109 4.11 2.780 18.60 1 1 4 2