2016-06-16 4 views
1

私はこの問題が発生するにはあまりにも長い間Rユーザーでしたが、私はあなたの助けが必要です(恥ずかしく思います)。シンプルな「マージ」の寸法が間違っているR

私は2つのデータセットを持っている:

まったく同じ文字列で満たされている共通の列、共有
> dim(markus301_rms.df) 
[1] 743 15 
> dim(markus301_envel.df) 
[1] 743 15 

> class(markus301_envel.df$soundname) 
[1] "character" 
> class(markus301_rms.df$soundname) 
[1] "character" 
> setdiff(markus301_rms.df$soundname,markus301_envel.df$soundname) 
character(0) 

ため、マージに適しているであろうが743x29のデータフレームに2セット。

さて、これは何が起こるかさ:予想通り

dim(merge(markus301_rms.df,markus301_envel.df,by="soundname")) 
[1] 1485 29 

列の数ですが、行数はほぼ倍です。 mergeは、2つのセット内の1つの重複エントリだけを識別できましたが、setdiffはすべてを重複として識別しました。奇妙なことに

dplyrは同じに動作します。

> require(dplyr) 
> markus301_rms.df %>% full_join(markus301_envel.df,by="soundname") %>% dim() 
[1] 1485 29 
> markus301_rms.df %>% left_join(markus301_envel.df,by="soundname") %>% dim() 
[1] 1485 29 
> markus301_rms.df %>% right_join(markus301_envel.df,by="soundname") %>% dim() 
[1] 1485 29 

私は前にこのような状況ではなかったです。

インデクシング列には何が問題なのですか?

EDIT:私のマシンに関する情報:

> Sys.info() 
                          sysname 
                          "Darwin" 
                          release 
                          "15.5.0" 
                          version 
"Darwin Kernel Version 15.5.0: Tue Apr 19 18:36:36 PDT 2016; root:xnu-3248.50.21~8/RELEASE_X86_64" 
                          nodename 
                  "Fredrik-Karlssons-Macbook-Air.local" 
                          machine 
                          "x86_64" 
+0

この現象を示す小さなデータセットをシミュレートできますか?クラスは同じかもしれませんが、文字列の表現はそうではないかもしれません(これはあなたの例からは明らかではありません)。 –

+3

両方のインデックス列に値が重複していませんか?私。 'sum(重複した(markus301_envel.df $ soundname))'は0に等しいか? – jkt

+1

'table(duplicated(markus301_envel.df $ soundname))'と 'table(duplicated(markus301_rms.df $ soundname))'とは何ですか? –

答えて

0

は、あなたがあなたの インデックス列の両方で任意の重複する値を持っていないことを確認していますか?私。は合計です(複製(markus301_envel.df $ soundname)) は0ですか? - jkt 11 minutess ago

テーブル(duplicated(markus301_envel.df $ soundname))と テーブル(duplicated(markus301_rms.df $ soundname))とは何ですか? - Jan van der Laan 7分前

あなたのコメントを回答に昇格することはできませんが、ありがとうございます!

関連する問題