r - 生成汇总表以显示数据框中每个组的分布
问题描述
所以这里是数据:
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)
解决方案
你很接近......第二行代码是可选的,以获得所有组合..只需获取sum
of 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
推荐阅读
- ios - 集成 React Native 后应用程序图标变为空白
- c - 如何为嵌套的零长度数组分配内存?
- reactjs - 如何让 Dialog 在 Material-UI 中占据 80% 的屏幕?
- python - Python:如果用户没有手动滚动,则自动将 ScrolledText 滚动到末尾
- python - MongoDB - 向用户添加数据库和集合级别角色
- ruby - Ruby Selenium 自动测试警报窗口
- scala - 如何在 Apache Spark 2.3.1 中映射/转换 ArrayType 中的每个元素
- python - 修改字典键
- docker - 这个命令有什么作用?:`docker build . -f Dockerfile2 -t `
- spring-boot - 从 1.5.7 迁移到 Spring Boot 2 - 不支持请求方法 POST - csrf 已禁用