为什么`merge()`产生一个空对象?

时间:2018-08-30 13:58:22

标签: r merge subset

我使用which()按物种对数据帧进行了子集设置:

sp1 <- data[which(data$species=='sp1'),]

此子数据帧(sp1)中有4个站点的数据,我想从其中两个中提取数据并将它们组合成一个新的数据帧。

我再次使用which()将它们子集化:

site.1 <- data.frame(sp1[which(sp1$site=='site1'),]) site.2 <- data.frame(sp1[which(sp1$site=='site2'),])

但是,当我使用merge()将它们组合到一个新的数据框中时:

site.1.2 <- merge(site.1,site.2, by = "site")

R产生一个空的数据帧(具有正确的标题)。

我的问题是:

1)为什么merge()不将来自site.1site.2的数据放入这个新的数据框中?

2)我可以简单地将site1和site2中的数据从原始数据帧中一起子集化吗?如果是这样,怎么办?我尝试将which()与OR语句一起使用:

site.1.2 <- data.frame(data[which(data$site=='site1'),] | data[which(data$site=='site1'),])

但这并不成功。

3 个答案:

答案 0 :(得分:1)

合并不起作用,因为它希望匹配两个数据集中的站点是否相等,您可以通过// colorIncreaseBrightness('#EBEDF0', 30) colorIncreaseBrightness(hex, percent) { return '#' + _(hex.replace('#', '')).chunk(2) .map(v => parseInt(v.join(''), 16)) .map(v => ((0 | (1 << 8) + v + (256 - v) * percent / 100).toString(16)) .substr(1)).join(''); } 来做到这一点

做您想做的最简单的方法就是

by = "all other columns"

可能需要进行一些细微的改动,没有使用虚拟道具来检查是否提供了

编辑:需要sp1 $,因为不是data.table

答案 1 :(得分:1)

我不确定我是否了解您真正想要的输出,但是我怀疑您想要一个包含两个站点数据的物种== sp1的数据框。

如果我是对的,则应按物种而不是按地点进行合并,如下所示:

site.1.2 <- merge(site.1,site.2, by = "species")

如果没有,并且要按站点合并,则应该执行以下操作:

site.1.2 <- merge(site.1,site.2, by = "site", all=T)

希望有帮助。

答案 2 :(得分:0)

一个非常简单的解决方案:

rbind(site.1,site.2)