1

可能重复:
将 CSV 导入 R 时如何生成具有 CSV 名称的列?

我有一组要加载到单个数据框中的文件。我正在阅读的每个文件都具有相同的结构,但行数不同。假设这些文件中的每一个都代表一个参与者,我知道我可以使用下面的代码阅读它们:

files <- c("john.csv","fred.csv","nick.csv","alex.csv")
library(plyr)
dfoc <- ldply(files, read.csv, header = T)

现在,我希望能够识别哪些行属于哪个参与者。在将这些文件读入大数据框之前,我想为每个文件添加一个列。我要添加的列的行数等于特定参与者的行数nrow(john)。我添加的列应该只包含一个标识符,例如重复文件名nrow(x)

有什么建议么?

4

1 回答 1

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
于 2012-11-21T21:40:28.170 回答