【问题标题】:Wrong dimensions doing simple 'merge' in R在 R 中进行简单“合并”的尺寸错误
【发布时间】:2016-06-16 11:26:23
【问题描述】:

我成为 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"

【问题讨论】:

  • 你能模拟一个演示这种行为的小数据集吗?请注意,虽然类可能相同,但字符串表示可能不同(这在您的示例中不清楚)。
  • 您确定您的两个索引列中没有任何重复值吗? IE。 sum(duplicated(markus301_envel.df$soundname)) 等于 0 吗?
  • table(duplicated(markus301_envel.df$soundname))table(duplicated(markus301_rms.df$soundname)) 怎么说?
  • 是的!就是这样!我确实在两组中都有重复的值(虽然我不应该,但这是一个不同的问题),所以对于所有匹配组合,我很可能会得到我得到的结果。优秀的!谢谢!

标签: r merge left-join dplyr


【解决方案1】:

你确定你没有任何重复的值在你的 索引列? IE。是总和(重复(markus301_envel.df$soundname)) 等于0? – jkt 11 分钟前

table(duplicated(markus301_envel.df$soundname)) 和 表(重复(markus301_rms.df$soundname))说? ——扬·范德兰 7 分钟前

很抱歉无法将您的 cmets 推广到答案,但谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多