【问题标题】:How to sum by group an "Origin-Destination" data frame?如何按组汇总“Origin-Destination”数据框?
【发布时间】:2014-12-07 11:57:45
【问题描述】:

我有这种数据框:

df<-data.frame(Origin=c(1,1,1,2,2,3,3,3),
               Var=   c(2,4,1,3,5,6,2,1),
               Desti= c(2,2,3,2,1,2,1,3))

我想得到Var 的总和,对于Origin 的每个值,按Desti (Out.x) 和Origin (In.x) 分组。结果将是df:

  Out.1 Out.2 Out.3 In.1 In.2 In.3
1     0     6     1    0    5    2
2     5     3     0    6    3    6
3     2     6     1    1    0    1

有什么想法吗?

【问题讨论】:

    标签: r sum summary


    【解决方案1】:

    这可能有帮助

    res <-  cbind(xtabs(Var~., df), xtabs(Var~Desti+Origin, df))
    colnames(res) <- paste(rep(c("Out", "In"), each=3), 1:3, sep=".")
    res
    #  Out.1 Out.2 Out.3 In.1 In.2 In.3
    #1     0     6     1    0    5    2
    #2     5     3     0    6    3    6
    #3     2     6     1    1    0    1
    

    或者,上面可以简化

     r1 <- xtabs(Var~., df)
     res <- cbind(r1, t(r1)) #change the `column names` accordingly
    

    或使用reshape2

    library(reshape2)
    res1 <- cbind(acast(df, Origin~Desti, value.var='Var', sum),
                   acast(df, Desti~Origin, value.var='Var', sum))
    colnames(res1) <- colnames(res) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 2022-11-19
      • 2020-05-05
      • 1970-01-01
      相关资源
      最近更新 更多