首页 > 解决方案 > 生成汇总表以显示数据框中每个组的分布

问题描述

所以这里是数据:

Year   State   Grade   Yes   
2000   AZ      A       1
2000   AZ      A       0
2000   AZ      A       1
2000   AZ      B       1
2000   AZ      B       1
2000   CA      A       1
2000   CA      A       0
2000   CA      B       0
2000   NY      A       1
2000   NY      A       1
2001   NY      B       1

我要做的是创建一个表格,将 Yes 列中 1 的总和显示为每个组的一部分。结果表将根据年份、州和年级显示每个组的值。它看起来像这样:

Year   Grade   AZ     CA   NY
2000   A       0.667  0.5  1
2000   B       1      0    1
2001   A       0      0    0
2001   B       0      0    1

数据还有更多,包括 Year、Grade 和 State 的多个值,因此该表会更大,但基本上它将基于这三个变量返回每个组的比例。

到目前为止,我的代码如下所示:

library(tidyverse)
data %>%
    group_by(Year, State, Grade) %>%
    summarise(x = Yes / count(Yes)) %>%
    spread(State, x)

标签: rtidyverse

解决方案


你很接近......第二行代码是可选的,以获得所有组合..只需获取sumof Yes,然后除以每组的行数(= n())..然后传播,如果你想要 NA = 0,不要忘记fill = 0最后。

df %>% 
  complete( Year, nesting( State, Grade ), fill = list( Yes = 0 ) ) %>%
  group_by( Year, State, Grade ) %>%
  summarise( x = sum( Yes ) / n() ) %>%
  spread( State, x, fill = 0 )

# # A tibble: 4 x 5
# # Groups:   Year [2]
#    Year Grade    AZ    CA    NY
#   <int> <chr> <dbl> <dbl> <dbl>
# 1  2000 A     0.667   0.5     1
# 2  2000 B     1       0       0
# 3  2001 A     0       0       0
# 4  2001 B     0       0       1

推荐阅读