R-如何合并具有相同列名但顺序不同的两个数据框

时间:2020-07-11 09:48:32

标签: r dataframe sorting merge

我想合并两个数据帧,但是顺序不同,并且RR中缺少一些列。

这里是一个例子:


df.1 <- data.frame(class = c(1,6,8,9,7,8,9,6,4), math = c(0.7, 0.4, 0.7), hist = c(0.6, 0.4, 0.3), geom = c(0.7, 0.4, 0.7), eng = c(0.7, 0.4, 0.7), draw = c(0.8, 0.6, 0.7))

df.2 <- data.frame(eng = c(0.7, 0.4, 0.7, class = c(2, 1, 2, 3, 1),draw = c(0.8, 0.6, 0.7),geom = c(0.7, 0.4, 0.7) )

谢谢

2 个答案:

答案 0 :(得分:0)

这是您要寻找的吗?

library(dplyr)

df <- 
  full_join(df.1, df.2)
#> Joining, by = c("class", "geom", "eng", "draw")

df
#>    class math hist geom eng draw
#> 1      1  0.7  0.6  0.7 0.7  0.8
#> 2      6  0.4  0.4  0.4 0.4  0.6
#> 3      8  0.7  0.3  0.7 0.7  0.7
#> 4      9  0.7  0.6  0.7 0.7  0.8
#> 5      7  0.4  0.4  0.4 0.4  0.6
#> 6      8  0.7  0.3  0.7 0.7  0.7
#> 7      9  0.7  0.6  0.7 0.7  0.8
#> 8      6  0.4  0.4  0.4 0.4  0.6
#> 9      4  0.7  0.3  0.7 0.7  0.7
#> 10     2   NA   NA  0.7 0.7  0.8
#> 11     1   NA   NA  0.4 0.4  0.6
#> 12     2   NA   NA  0.7 0.7  0.7
#> 13     3   NA   NA  0.7 0.7  0.8
#> 14     1   NA   NA  0.4 0.4  0.6
#> 15     3   NA   NA  0.7 0.7  0.7

reprex package(v0.3.0)于2020-07-11创建

数据

df.1 <- data.frame(class = c(1,6,8,9,7,8,9,6,4), 
                   math = c(0.7, 0.4, 0.7), 
                   hist = c(0.6, 0.4, 0.3), 
                   geom = c(0.7, 0.4, 0.7), 
                   eng = c(0.7, 0.4, 0.7), 
                   draw = c(0.8, 0.6, 0.7))

df.2 <- data.frame(eng = c(0.7, 0.4, 0.7), 
                   class = c(2, 1, 2, 3, 1, 3),
                   draw = c(0.8, 0.6, 0.7),
                   geom = c(0.7, 0.4, 0.7) )

答案 1 :(得分:0)

以下是我所能得到的

class = c(1, 6, 8, 9, 7, 8, 9, 6, 4)
math = c(0.7, 0.4, 0.7)
hist = c(0.6, 0.4, 0.3)
geom = c(0.7, 0.4, 0.7)
eng = c(0.7, 0.4, 0.7)
draw = c(0.8, 0.6, 0.7)

dimension <-
  seq(max(
    length(class),
    length(math),
    length(hist),
    length(geom),
    length(eng),
    length(draw)
  ))

df.new <- data.frame(class[dimension], math[dimension], hist[dimension], 
                     geom[dimension], eng[dimension], draw[dimension])

names(df.new) <- c('class', 'math', 'hist', 'geom', 'eng', 'draw')

输出

df.new
  class math hist geom eng draw
1     1  0.7  0.6  0.7 0.7  0.8
2     6  0.4  0.4  0.4 0.4  0.6
3     8  0.7  0.3  0.7 0.7  0.7
4     9   NA   NA   NA  NA   NA
5     7   NA   NA   NA  NA   NA
6     8   NA   NA   NA  NA   NA
7     9   NA   NA   NA  NA   NA
8     6   NA   NA   NA  NA   NA
9     4   NA   NA   NA  NA   NA