【问题标题】:Combining an individual and aggregate level data sets结合单个和聚合级别的数据集
【发布时间】:2013-02-19 21:00:38
【问题描述】:

我有两个不同的数据框,我们称它们为“月”和“人”。

月份如下所示:

Month   Site   X
1       1      4
2       1      3
3       1      5
1       2      10
2       2      7
3       2      5

人物看起来像这样:

ID   Month   Site
1    1       1
2    1       2
3    1       1
4    2       2
5    2       2
6    2       2
7    3       1
8    3       2

我想将它们组合起来,因此基本上每次“人物”中的条目具有特定的月份和站点组合时,它都会添加到适当的聚合数据框中,所以我会得到如下内容:

Month   Site   X   People
1       1      4   2
2       1      3   0
3       1      5   1
1       2      10  1
2       2      7   3
3       2      5   1

但我不知道如何去做。有什么建议吗?

【问题讨论】:

    标签: r


    【解决方案1】:

    使用基础包

    > aggregate( ID ~ Month + Site, data=People, FUN = length )
      Month Site ID
    1     1    1  2
    2     3    1  1
    3     1    2  1
    4     2    2  3
    5     3    2  1
    > res <- merge(Months, aggdata, all.x = TRUE)
    
    > res
      Month Site  X ID
    1     1    1  4  2
    2     1    2 10  1
    3     2    1  3 NA
    4     2    2  7  3
    5     3    1  5  1
    6     3    2  5  1
    > res[is.na(res)] <- 0
    > res
      Month Site  X ID
    1     1    1  4  2
    2     1    2 10  1
    3     2    1  3  0
    4     2    2  7  3
    5     3    1  5  1
    6     3    2  5  1
    

    【讨论】:

      【解决方案2】:

      假设您的data.frames 是monthspeople,这是data.table 的解决方案:

      require(data.table)
      m.dt <- data.table(months, key=c("Month", "Site"))
      p.dt <- data.table(people, key=c("Month", "Site"))
      # one-liner
      dt.f <- p.dt[m.dt, list(X=X[1], People=sum(!is.na(ID)))]
      
      > dt.f
      
      #    Month Site  X People
      # 1:     1    1  4      2
      # 2:     1    2 10      1
      # 3:     2    1  3      0
      # 4:     2    2  7      3
      # 5:     3    1  5      1
      # 6:     3    2  5      1
      

      【讨论】:

        猜你喜欢
        • 2015-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多