我正在阅读许多具有相似(不相同)列的数据文件。不同文件中存在4到20列。
尝试创建将每个文件绑定到其他文件的单个data.frame行。匹配列应在结果中形成一列。缺少列的行会获得NA。
与以前的问题不同:数据列的数量和确切名称在读取每个文件后都是“仅”知道的。在读取数据时,需要生成输出数据帧中的最大列数。
E.g。
df1有“DEPTH”,“GR_norm”,“NeuHyCorr”,“DenHyCorr”,“DT”,“UWI”等列
df2有“DEPTH”,“GR_norm”,“DenHyCorr”,“NeuHyCorr”,“PHIE”,“RRT”,“UWI”等列
df3有“DEPTH”,“GR_norm”,“DenHyCorr”,“NeuHyCorr”,“RRT”,“Rocktype”,“UWI”等列
.....
我在for循环中做rbind:数据被读入data.frame - 每次循环迭代中的temp并与下面的代码合并
if(wellno == 1)welldata< - temp else welldata< - rbind(welldata,temp)
它以
失败rbind(deparse.level,...)中的错误: 参数列数不匹配
尝试merge()
代替rbind
失败。
我希望看到welldata拥有各个数据框的所有列。
答案 0 :(得分:3)
使用plyr
:
library(plyr)
df1 = data.frame(a=1:2,b=letters[1:2])
df2 = data.frame(b=letters[3:4],c=c('dog','cat'))
rbind.fill(list(df1, df2))
# a b c
#1 1 a <NA>
#2 2 b <NA>
#3 NA c dog
#4 NA d cat
或使用data.table
rbindlist
包并使用TRUE
的填充选项(但这会为您提供data.table对象):
rbindlist(list(df1, df2), fill=T)
# a b c
#1: 1 a NA
#2: 2 b NA
#3: NA c dog
#4: NA d cat
答案 1 :(得分:0)
使用dplyr
:
df1 = data.frame(a=1:2,b=letters[1:2])
df2 = data.frame(b=letters[3:4],c=c('dog','cat'))
bind_rows(df1, df2)
Source: local data frame [4 x 3]
a b c
(int) (chr) (fctr)
1 1 a NA
2 2 b NA
3 NA c dog
4 NA d cat
对于许多数据框,将它们存储在列表(或矢量)中并将其与Reduce
结合使用,如
# list of 10 different dataframes:
df_list <- lapply(1:10,
function(x) setNames(data.frame(rnorm(1)), sample(letters[1:3],1)))
Reduce(bind_rows, df_list)
Source: local data frame [10 x 3]
a b c
(dbl) (dbl) (dbl)
1 -1.6825270 NA NA
2 NA -0.4742396 NA
3 NA 0.1676438 NA
4 NA 1.0191025 NA
5 NA -0.1836922 NA
6 0.1188567 NA NA
7 NA 0.4464885 NA
8 -1.2886858 NA NA
9 0.3945049 NA NA
10 NA NA 0.3039996