我遇到了一个复杂的问题:我有两个数据帧,它们分别具有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
>
有什么建议么?
你可以先重塑(使用两个数据帧melt
从reshape2
),然后将它们合并(使用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] 删除。
我来说两句