在 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
很抱歉无法将您的评论提升为答案,但谢谢!
我成为 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
很抱歉无法将您的评论提升为答案,但谢谢!