R - dplyr 总结的转换输出格式

R - transform output format of dplyr summarise

我非常感谢使用 dyplr 中的 summarise 以产生汇总统计数据。

但是,我并不完全相信输出的"format"。

例如:

mt = mtcars %>% 
 group_by(gear, vs) %>% 
 summarise(mean (disp) ) 

会产生

  gear vs mean(disp)
1    3  0   357.6167
2    3  1   201.0333
3    4  0   160.0000
4    4  1   115.6200
5    5  0   229.3250
6    5  1    95.1000

对于我的科学报告,我更喜欢这样显示输出(无论这个 mtcars 示例的统计意义如何):

  gear Mean Vs = 1 Mean Vs = 0
    3    201.0333    357.6167
    4    115.6200    160.0000
    5     95.1000    229.3250

你知道是否可以 "control" dplyr summarise 的输出格式吗?

我认为 reshape2 包的 dcast 功能对你有用。

library(reshape2)
dcast(mt, gear ~ vs)
Using mean(disp) as value column: use value.var to override.
  gear        0        1
1    3 357.6167 201.0333
2    4 160.0000 115.6200
3    5 229.3250  95.1000

您可以使用 tidyr 中的 spread 来扩展您的管道。请注意,我为均值分配了一个名称,因此可以在 spread 调用中简单地引用它。

library(dplyr)
library(tidyr)

mtcars %>% 
    group_by(gear, vs) %>% 
    summarise(mean_disp = mean (disp) ) %>%
    spread(vs, mean_disp)

Source: local data frame [3 x 3]

  gear        0        1
1    3 357.6167 201.0333
2    4 160.0000 115.6200
3    5 229.3250  95.1000