追加行绑定具有不同行和列的多个数据框

时间:2016-05-30 12:02:32

标签: r dataframe merge rbind

我正在阅读许多具有相似(不相同)列的数据文件。不同文件中存在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拥有各个数据框的所有列。

2 个答案:

答案 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