r - 如何使用 dplyr 对汇总频率表进行分箱
问题描述
我有以下数据框:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
df <- nycflights13::flights %>%
select(distance) %>%
group_by(distance) %>%
summarise(n = n()) %>%
arrange(distance) %>% ungroup()
df
#> # A tibble: 214 x 2
#> distance n
#> <dbl> <int>
#> 1 17 1
#> 2 80 49
#> 3 94 976
#> 4 96 607
#> 5 116 443
#> 6 143 439
#> 7 160 376
#> 8 169 545
#> 9 173 221
#> 10 184 5504
#> # … with 204 more rows
我想要做的是distance
按大小为 100 的 bin 对列进行分类,并相应地对n
列进行求和。怎么能这样做?
所以你会得到类似的东西:
bin_distance sum_n
1-100 1633 #(1 + 49 + 976 + 607)
101-200 21344 # (443 + ... + 5327)
#etc
解决方案
最简单的方法是为每 100 个值和每个组的值cut
创建groups
using 。seq
sum
library(dplyr)
df %>%
group_by(group = cut(distance, breaks = seq(0, max(distance), 100))) %>%
summarise(n = sum(n))
# group n
# <fct> <int>
# 1 (0,100] 1633
# 2 (100,200] 21344
# 3 (200,300] 28310
# 4 (300,400] 7748
# 5 (400,500] 21292
# 6 (500,600] 26815
# 7 (600,700] 7846
# 8 (700,800] 48904
# 9 (800,900] 7574
#10 (900,1e+03] 18205
# ... with 17 more rows
可以使用aggregate
like将其转换为基础 R
aggregate(n ~ distance,
transform(df, distance = cut(distance, breaks = seq(0, max(distance), 100))), sum)
推荐阅读
- r - rjags 和 r2jags 之间的区别
- amazon-redshift - Redshift 对约束的评论
- javascript - 根据父页面上的按钮单击在子页面内加载 div
- uicollectionview - 如果项目使用 iOS12 SDK 在 Xcode 10 beta (10L176w) 中编译,则 UICollectionView 不能 `dequeueReusableCellWithReuseIdentifier`
- dart - 如何转换成双倍
- r - 使用 rpart(iris 数据集)预测回归树
- python - 当我使用 toastnotification 执行 python exe 时显示未找到 win10toast 分发
- ansible - 无法在 Vagrant box 上使用 Ansible 启动 Docker 服务
- c++ - 我可以检查 `shared_from_this` 是否可以安全调用?
- jquery - 不想使用 printThis 库显示打印预览弹出窗口