【问题标题】:Sum information from another table汇总另一个表的信息
【发布时间】:2018-02-05 19:17:15
【问题描述】:

如何汇总另一个表中的信息。示例:表 Y 具有销售值,它在表 X 中通过“ID”列对值求和。

表 X

Id <- c(1,25,30)
Product <- c("Shirt", "Pants", "Shorts")
X <- data.frame(Id, Product)

表 Y

Id <- c(1,1,1,25,25,30,25,30)
sale_value <- c(250,250,250,300,300,150,300,150)
Y <- data.frame(Id,sale_value)

我需要在表 X 中添加一个名为“Sale_total”的列,将表 Y(列“sale_values”)中的值相加,通过列“Id”

【问题讨论】:

  • 你可以用data.tablesetDT(X)[Y, Sale_total := sum(sale_value), on = .(Id), by = .EACHI]来做到这一点

标签: r sum left-join


【解决方案1】:

你可以使用aggregate Y 然后mergeX 在基础R:

merge(X, aggregate(sale_value ~ Id, Y, sum), by = 'Id')

结果:

  Id Product sale_value
1  1   Shirt        750
2 25   Pants        900
3 30  Shorts        300

或从tidyversedplyr 左连接:

library(dplyr)
X %>% 
  left_join(Y %>% 
              group_by(Id) %>% 
              summarise(sale_total = sum(sale_value)),
            by = 'Id')

【讨论】:

    【解决方案2】:

    看起来你需要加入,然后聚合。这是data.table的一种方式:

    library( data.table )
    setDT( X )
    setDT( Y )
    

    加入Id,然后对按Id分组的值求和

    X[Y, on = "Id"][ , sum( sale_value ), by = Id ]
    
       Id  V1
    1:  1 750
    2: 25 900
    3: 30 300
    

    【讨论】:

      【解决方案3】:

      另外,你可以使用sqldf:

      X <- sqldf("SELECT X.Id, X.Product, sum(Y.sale_value)
             FROM X JOIN Y on X.Id = Y.Id
             GROUP BY X.Id, X.Product")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-01
        • 2016-06-19
        • 2012-02-04
        • 2019-03-19
        • 1970-01-01
        • 1970-01-01
        • 2018-07-26
        • 1970-01-01
        相关资源
        最近更新 更多