我有一个目录,其中包含两个.csv
个文件,我想要读取并导入到R中。
到目前为止,我已尝试过以下实际可行的代码。但仅适用于其中一个文件。
for (i in list.files(path = ".", pattern = "\\.csv$")){
print(i)
f <- read.table(i, fill=TRUE, row.names=NULL)
Table <- data.frame(f[3])
Table["station.id"] <- i
}
Table
可生产
V3 station.id
1 8.27 agrin.csv
2 9.11 agrin.csv
3 11.60 agrin.csv
4 15.30 agrin.csv
5 20.53 agrin.csv
6 25.07 agrin.csv
7 27.42 agrin.csv
8 27.11 agrin.csv
9 22.92 agrin.csv
10 17.98 agrin.csv
11 13.15 agrin.csv
12 9.62 agrin.csv
13 17.34 agrin.csv
我想要的是实现一个for
循环,它将迭代目录并为上面的每个文件创建一个如上所示的表。
请注意,print(i)
行会返回两个结果agrin.csv
和agr.csv
,例如
有什么建议吗?
答案 0 :(得分:2)
在for
循环之前,请:
Table <- data.frame(V3=numeric(0), station.id=character(0))
这称为对象预分配。
然后,在循环中,尝试使用rbind
。
使用此方案,您将逐步创建对象。
答案 1 :(得分:0)
您没有指定Table$station.id
的行索引,因此最后一个值最终会写在整个列上。试试这个:
file.names <- list.files(path = ".", pattern = "\\.csv$")
Table <- data.frame(V3=rep(NA, length(file.names)),
station.id=rep(NA, length(file.names)))
for (i in seq_along(file.names)){
print(file.names[i])
f <- read.table(file.names[i], fill=TRUE, row.names=NULL)
Table[i, "V3"] <- f[3] ## this only works if f has only one observation.
Table[i, "station.id"] <- file.names[i]
}
Table