【问题标题】:Generate a Summary Table for Showing Spread of each Group in Data Frame生成汇总表以显示数据框中每个组的分布
【发布时间】:2018-12-06 14:47:06
【问题描述】:

所以这是数据:

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)

【问题讨论】:

  • data.table::dcast(df, Year + Grade ~ State, fun = mean, fill = 0)

标签: r tidyverse


【解决方案1】:

你很接近... 第二行代码是可选的,获取所有组合.. 只需得到Yessum,然后除以每组的行数(=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

【讨论】:

  • complete 更新答案以匹配所需的输出
猜你喜欢
  • 1970-01-01
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
相关资源
最近更新 更多