在 R 中做简单 'merge' 的尺寸错误

Wrong dimensions doing simple 'merge' in R

我成为 R 用户太久了,所以才出现这个问题,我需要你的帮助(很尴尬)。

我有两个数据集:

> 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 数据框。

现在,情况是这样的:

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

列数符合预期,但行数几乎是原来的两倍。 merge只能在两组中识别出一个重复的条目,而 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

我以前没有遇到过这种情况。

我的索引列可能有什么问题???

编辑:我机器上的信息:

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

Are you sure that you don't have any duplicate values in both of your index columns? I.e. is sum(duplicated(markus301_envel.df$soundname)) equal to 0? – jkt 11 mins ago

What do table(duplicated(markus301_envel.df$soundname)) and table(duplicated(markus301_rms.df$soundname)) say? – Jan van der Laan 7 mins ago

很抱歉无法将您的评论提升为答案,但谢谢!