1

私が予期しないと言うとき、私は私にとって予期しないことを意味します。説明させてください。2つのdata.framesがあります。

b1<-data.frame(a=c("a","b"),b=1:2)
b2<-data.frame(a=c("a","b"),c=1:2)

マージは次を生成します

> merge(b1,b2)
  a b c
1 a 1 1
2 b 2 2

しかし、data.framesがある場合

b1<-data.frame(a=c("a","a"),b=1:2)
b2<-data.frame(a=c("a","a"),c=1:2)

マージは

> merge(b1,b2)
  a b c
1 a 1 1
2 a 1 2
3 a 2 1
4 a 2 2

私が期待するとき

  a b c
  a 1 1
  a 2 2

なぜ2つの異なる結果ですか?

4

1 に答える 1

3

これは仕様によるものです。指定された(または指定されていない)列に基づいmergeて使用します。matchケース1では、の値ごとに一致するものが1つだけ見つかったaため、重複はありませんでした。しかし、ケース2では、2つの一致が見つかりました。

> b1$a %in% b2$a 
[1] TRUE TRUE  

各aに対して、したがってすべての可能な一致を返しました。詳細については、を参照?mergeしてください。joininにplyrは、最初の一致のみを一致させるオプションがあります。

> join(b1,b2, match="first")
Joining by: a
  a b c
1 a 1 1
2 a 2 1
于 2012-10-26T07:43:36.207 に答える