【发布时间】: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))怎么说? -
是的!就是这样!我确实在两组中都有重复的值(虽然我不应该,但这是一个不同的问题),所以对于所有匹配组合,我很可能会得到我得到的结果。优秀的!谢谢!