【问题标题】:Why is `merge()` producing an empty object?为什么`merge()`会产生一个空对象?
【发布时间】:2018-08-30 13:58:21
【问题描述】:

我使用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 &lt;- merge(site.1,site.2, by = "site")

R 生成一个空数据帧(带有正确的标头)。

我的问题是:

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

2) 我可以简单地将来自站点 1 和站点 2 的数据从原始数据帧中提取出来吗?如果是这样,怎么做?我尝试将which() 与 OR 语句一起使用:

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

但这并不成功。

【问题讨论】:

    标签: r merge subset


    【解决方案1】:

    合并不起作用,因为它希望在两个数据集中匹配相同的站点,您可以这样做by = "all other columns" 也许

    做你想做的最简单的方法是

    site.1.2 <- sp1[sp1$Site %in% c("site1", "site2"), ]
    

    可能需要稍作改动,未使用虚拟集进行检查,未提供

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

    【讨论】:

      【解决方案2】:

      我不确定我是否理解你真正想要的输出,但我怀疑你想要一个带有两个站点数据的物种 == sp1 的数据框。

      如果我是正确的,您应该按物种而不是按站点进行合并,如下所示:

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

      如果没有,并且您想按站点合并,您应该这样做:

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

      希望对你有帮助。

      【讨论】:

        【解决方案3】:

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

        rbind(site.1,site.2)

        【讨论】:

          猜你喜欢
          • 2017-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-12
          • 2022-10-14
          • 2017-11-14
          • 1970-01-01
          • 2021-07-20
          相关资源
          最近更新 更多