代謝物データのかなり大きなデータセットがあります。一部のセットにはラベルのない繰り返しがあります (繰り返しを示す列はありません)。小さな例を以下に示します。
a<-structure(list(ABBRC = structure(c(1L, 2L, 2L, 3L, 4L, 4L, 4L
), .Label = c("X1", "X2", "X3", "X4"), class = "factor"), X = 1:7,
Y = 1:7, Year = c(2009L, 2009L, 2009L, 2009L, 2009L, 2009L,
2009L)), .Names = c("ABBRC", "X", "Y", "Year"), class = "data.frame", row.names = c(NA,
-7L))
b<-structure(list(ABBRC = structure(c(1L, 2L, 3L, 4L, 4L, 4L, 4L
), .Label = c("X1", "X2", "X3", "X4"), class = "factor"), Z = c(1L,
2L, 4L, 5L, 6L, 7L, 8L), A = c(1L, 2L, 4L, 5L, 6L, 7L, 8L), Year = c(2009L,
2009L, 2009L, 2009L, 2009L, 2009L, 2009L)), .Names = c("ABBRC",
"Z", "A", "Year"), class = "data.frame", row.names = c(NA, -7L
))
merge(a,b)
ABBRC Year X Y Z A
1 X1 2009 1 1 1 1
2 X2 2009 2 2 2 2
3 X2 2009 3 3 2 2
4 X3 2009 4 4 4 4
5 X4 2009 5 5 5 5
6 X4 2009 5 5 6 6
7 X4 2009 5 5 7 7
8 X4 2009 5 5 8 8
9 X4 2009 6 6 5 5
10 X4 2009 6 6 6 6
11 X4 2009 6 6 7 7
12 X4 2009 6 6 8 8
13 X4 2009 7 7 5 5
14 X4 2009 7 7 6 6
15 X4 2009 7 7 7 7
16 X4 2009 7 7 8 8
マージすると、繰り返される行の組み合わせが出力されます。これは予想される動作ですが、私が望むものではありません。あたかも繰り返しであるかのようにデータをマージしたいと思います(そうです)。この種のマージを行う機能はありますか、または繰り返しにラベルを付けてからマージする方が簡単ですか? ラベルを付ける方が簡単だとしたら、どのような方法がよいでしょうか?
望ましい出力
structure(list(ABBRC = structure(c(1L, 2L, 2L, 3L, 4L, 4L, 4L,
4L), .Label = c("X1", "X2", "X3", "X4"), class = "factor"), X = c(1L,
2L, 3L, 4L, 5L, 6L, 7L, NA), Y = c(1L, 2L, 3L, 4L, 5L, 6L, 7L,
NA), Z = c(1L, 2L, NA, 4L, 5L, 6L, 7L, 8L), A = c(1L, 2L, NA,
4L, 5L, 6L, 7L, 8L), Year = c(2009L, 2009L, 2009L, 2009L, 2009L,
2009L, 2009L, 2009L)), .Names = c("ABBRC", "X", "Y", "Z", "A",
"Year"), class = "data.frame", row.names = c(NA, -8L))
ABBRC X Y Z A Year
1 X1 1 1 1 1 2009
2 X2 2 2 2 2 2009
3 X2 3 3 NA NA 2009
4 X3 4 4 4 4 2009
5 X4 5 5 5 5 2009
6 X4 6 6 6 6 2009
7 X4 7 7 7 7 2009
8 X4 NA NA 8 8 2009