我使用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.1
和site.2
的数据放入这个新的数据框中?
2)我可以简单地将site1和site2中的数据从原始数据帧中一起子集化吗?如果是这样,怎么办?我尝试将which()
与OR语句一起使用:
site.1.2 <- data.frame(data[which(data$site=='site1'),] | data[which(data$site=='site1'),])
但这并不成功。
答案 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)