以所有组合合并两个数据框

pp

我遇到了一个复杂的问题:我有两个数据帧,它们分别具有4个不同机器的no和规格(颜色,零件)的组合。每台机器总共有5种规格(实际上,更多机器和规格)。这是两个示例数据帧:

df1 <- data.frame( 
  nr=c("000", "000", "000", "001", "002",
       "002", "003", "004", "004", "004", "005"), 
  Color=c("Red", "Cyan", "Brown", "Blue", "Red",
          "Green", "DeepBlue", "Orange", "Cyan", "Grey", "Magenta"), 
  mach1=c(1, NA, NA, 1, NA, 1, 1, NA, 1, NA, 1),  
  mach2=c(1, NA, NA, 1, NA, 1, 1, 1, NA, NA, 1),  
  mach3=c(NA, 1, NA, 1, 1, NA, 1, NA, NA, 1, 1),  
  mach4=c(NA, NA, 1, 1, NA, 1, 1, NA, NA, 1, 1))

df2 <- data.frame( 
  nr=c("000", "000", "001", "002", "002",
       "003", "003", "004", "005", "005"), 
  Part=c("Car", "Tree", "Flag", "Tree", "Road",
         "Road", "House", "Plane", "House", "Car"), 
  mach1=c(NA, 1, 1, NA, 1, NA, 1, 1, NA, 1),  
  mach2=c(1, NA, 1, NA, 1, NA, 1, 1, 1, NA),  
  mach3=c(NA, 1, 1, 1, NA, 1, NA, 1, 1, NA),  
  mach4=c(NA, 1, 1, 1, NA, 1, NA, 1, 1, NA))

所以我有这些输出:

> df1
    nr    Color mach1 mach2 mach3 mach4
1  000      Red     1     1    NA    NA
2  000     Cyan    NA    NA     1    NA
3  000    Brown    NA    NA    NA     1
4  001     Blue     1     1     1     1
5  002      Red    NA    NA     1    NA
6  002    Green     1     1    NA     1
7  003 DeepBlue     1     1     1     1
8  004   Orange    NA     1    NA    NA
9  004     Cyan     1    NA    NA    NA
10 004     Grey    NA    NA     1     1
11 005  Magenta     1     1     1     1
> df2
    nr  Part mach1 mach2 mach3 mach4
1  000   Car    NA     1    NA    NA
2  000  Tree     1    NA     1     1
3  001  Flag     1     1     1     1
4  002  Tree    NA    NA     1     1
5  002  Road     1     1    NA    NA
6  003  Road    NA    NA     1     1
7  003 House     1     1    NA    NA
8  004 Plane     1     1     1     1
9  005 House    NA     1     1     1
10 005   Car     1    NA    NA    NA

现在,我想将这两个数据帧合并为一个新的数据帧df3,该数据帧显示特定机器的Color和Part的所有组合,如下所示:

> df3
    nr    Color  Part mach1 mach2 mach3 mach4
1  000      Red  Tree     1    NA    NA    NA
2  000      Red   Car    NA     1    NA    NA
3  000     Cyan  Tree    NA    NA     1    NA
4  000    Brown  Tree    NA    NA    NA     1
5  001     Blue  Flag     1     1     1     1
6  002    Green  Road     1     1    NA    NA
7  002      Red  Tree    NA    NA     1    NA
8  002    Green  Tree    NA    NA    NA     1
9  003 Deepblue House     1     1    NA    NA
10 003 Deepblue  Road    NA    NA     1     1
11 004     Cyan Plane     1    NA    NA    NA
12 004   Orange Plane    NA     1    NA    NA
13 004     Grey Plane    NA    NA     1     1
14 005  Magenta   Car     1    NA    NA    NA
15 005  Magenta House    NA     1     1     1
> 

有什么建议么?

红菜头

你可以先重塑(使用两个数据帧meltreshape2),然后将它们合并(使用full_join来自dplyr)和重塑该回到原来的格式:

library(dplyr)
library(reshape2)

df1.b <- melt(df1)
df2.b <- melt(df2)

df3 <- full_join(df1.b, df2.b)

df3 <- na.omit(df3)

df3.b <- dcast(df3, nr + Color + Part ~ variable)

    nr    Color  Part mach1 mach2 mach3 mach4
1  000    Brown  Tree    NA    NA    NA     1
2  000     Cyan  Tree    NA    NA     1    NA
3  000      Red   Car    NA     1    NA    NA
4  000      Red  Tree     1    NA    NA    NA
5  001     Blue  Flag     1     1     1     1
6  002    Green  Road     1     1    NA    NA
7  002    Green  Tree    NA    NA    NA     1
8  002      Red  Tree    NA    NA     1    NA
9  003 DeepBlue House     1     1    NA    NA
10 003 DeepBlue  Road    NA    NA     1     1
11 004     Cyan Plane     1    NA    NA    NA
12 004     Grey Plane    NA    NA     1     1
13 004   Orange Plane    NA     1    NA    NA
14 005  Magenta   Car     1    NA    NA    NA
15 005  Magenta House    NA     1     1     1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章