2016-06-16 9 views
1

Ich bin ein R Benutzer zu lange für dieses Problem aufgetreten, und ich brauche Ihre Hilfe (peinlich).Falsche Dimensionen machen einfach 'merge' in R

Ich habe zwei Datensätze:

> dim(markus301_rms.df) 
[1] 743 15 
> dim(markus301_envel.df) 
[1] 743 15 

, die eine gemeinsame Spalte teilen, die mit den genau gleichen Strings gefüllt ist:

> 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) 

und daher geeignet wäre, die für die Zusammenführung zwei Sätze in einen 743x29 Datenrahmen.

Nun, dies ist, was passiert:

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

Die Anzahl der Spalten, wie erwartet, aber die Anzahl der Zeilen ist fast das Doppelte. merge konnte nur einen einzigen doppelten Eintrag in den beiden Mengen identifizieren, während setdiff alle als Duplikate identifizierte.

Merkwürdigerweise verhält sich dplyr gleich:

> 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 

ich vor in dieser Situation nicht gewesen sein.

Was kann mit meiner Indexierungssäule falsch sein ???

EDIT: Informationen auf meiner Maschine:

> 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

Können Sie einen kleinen Datensatz simulieren, der dieses Verhalten demonstriert? Beachten Sie, dass die String-Repräsentationen möglicherweise nicht übereinstimmen, obwohl die Klassen identisch sein können (dies ist in Ihrem Beispiel nicht klar). –

+3

Sind Sie sicher, dass in Ihren beiden Indexspalten keine doppelten Werte vorhanden sind? I.e. ist 'sum (dupliziert (markus301_envel.df $ soundname))' gleich 0? – jkt

+1

Was sagen 'table (dupliziert (markus301_envel.df $ soundname))' und 'table (dupliziert (markus301_rms.df $ soundname))' sagen? –

Antwort

0

Sind Sie sicher, dass Sie haben noch keine doppelten Werte in Ihre beiden Indexspalten? I.e. ist Summe (dupliziert (markus301_envel.df $ soundname)) gleich 0? - jkt 11 Minuten vor

Was sagen Tabelle (doppelte (markus301_envel.df $ soundname)) und Tabelle (doppelte (markus301_rms.df $ soundname)) sagen? - Jan van der Laan

Es tut uns leid, dass Sie Ihre Kommentare zu Antworten nicht promoten können, aber Danke!