在列中使用grouped_by变量汇总交叉表中的数据

时间:2017-05-09 18:12:36

标签: r dplyr tidyr

我试图在两个变量之间汇总数据,并且汇总的输出非常粗糙(至少在r笔记本输出中,表分解多个页面)。我想将一个变量作为摘要输出的行,另一个作为列,然后在实际表中,每个行和行的组合的平均值。列数据 一些示例数据:

 dat1 <- data.frame(
    category = rep(c("catA", "catB", "catC"), each=4),
    age = sample(1:2,size=4,replace=T),
    value = rnorm(12)
 )

然后我通常会得到这样的摘要数据框:

dat1 %>% group_by(category,age)%>% summarize(mean(value))

看起来像这样: enter image description here

但是我的实际数据中的每个变量都有10个以上的级别,因此表格很长且难以阅读。 我更喜欢这样的东西,我用它创建:

dat1 %>% group_by(category)
%>% summarize(mean.age1 =mean(value[age==1]),
mean.age2 =mean(value[age==2]))

enter image description here

必须有一种比手动编码更好的方法吗?

1 个答案:

答案 0 :(得分:2)

除了执行以下操作外,您还需要使用tidyr

library(dplyr)
library(tidyr)
dat1 %>%
  group_by(category, age) %>%
  summarise(mean = mean(value)) %>%
  spread(age, mean, sep = '')

输出如下:

Source: local data frame [3 x 3]
Groups: category [3]

  category      age1      age2
*   <fctr>     <dbl>     <dbl>
1     catA 0.2930104 0.3861381
2     catB 0.5752186 0.1454201
3     catC 1.0845645 0.3117227