我想在一个数据框中合并多个csv文件。 我有22个csv文件,每个文件有1个属性,行数不等
我使用过这段代码却收到错误
temp = list.files(pattern="*.csv")
myfiles = lapply(temp, read.delim)
df<-data.frame(myfiles)
错误:
Error in data.frame(list(Auto = c(67L, 964L, 730L, 443L, 1191L, 160L, :
arguments imply differing number of rows: 1193, 193, 737, 1468, 3500, 3707, 3499, 3459, 1211, 5029, 5024, 2804, 3226, 3439, 2004, 2092, 2778
答案 0 :(得分:1)
如果确实所有文件都有一个属性,那么rbind
就可以了。我们可以简洁地使用它:
df <- do.call(rbind, lapply(list.files(pattern = "*.csv"), read.csv))
我们对每个文件名应用read.csv
,并使用list
返回data.frame
lapply
个do.call
。然后,我们使用rbind
将所有数据框作为{{1}}的参数提供。
答案 1 :(得分:0)
在 plyr 包中有一个函数rbind.fill,它将合并data.frames并为空单元格引入NA:
library(plyr)
concat <- rbind.fill(mtcars[c("mpg", "wt")], mtcars[c("wt", "cyl")])
concat[25:40, ]
mpg wt cyl
25 19.2 3.845 NA
26 27.3 1.935 NA
27 26.0 2.140 NA
28 30.4 1.513 NA
29 15.8 3.170 NA
30 19.7 2.770 NA
31 15.0 3.570 NA
32 21.4 2.780 NA
33 NA 2.620 6
34 NA 2.875 6
35 NA 2.320 4