r - R - 所有数据表列的分箱频率
问题描述
我正在使用包含气象站距离矩阵(以米为单位)的数据表。从一个站点到另一个站点的距离组织在数据表的每一列中。
数据如下所示:
library(data.table)
df <- structure(list(`1` = c(NA, 183861.946148085, 455184.652723047,
84776.9412266853, 471037.870714541), `10` = c(183861.946148085,
NA, 323843.574006837, 268617.304324823, 456775.683807133), `100` = c(455184.652723047,
323843.574006837, NA, 527585.966416289, 757973.787598604), `1000` = c(84776.9412266853,
268617.304324823, 527585.966416289, NA, 498646.318627207), `1002` = c(471037.870714541,
456775.683807133, 757973.787598604, 498646.318627207, NA)), class = "data.frame", row.names = c(NA,
-5L))
dt <- setDT(df)
1 10 100 1000 1002
1: NA 183861.9 455184.7 84776.94 471037.9
2: 183861.95 NA 323843.6 268617.30 456775.7
3: 455184.65 323843.6 NA 527585.97 757973.8
4: 84776.94 268617.3 527586.0 NA 498646.3
5: 471037.87 456775.7 757973.8 498646.32 NA
其中第一列显示从站1
到自身(零)和站的距离10
,100
和。此后,按列。1000
1002
我有兴趣找出距离每个车站 100、150、250 和 500 公里范围内的车站数量。
因此,对于每一列,我想确定位于breaks <- c(100000, 150000, 250000, 500000)
.
预期的输出将是:
ID distance count prop
1 0-100000 1 25
1 100000-150000 0 0
1 150000-250000 1 25
1 250000-500000 2 50
...
我的真实数据集尺寸为 1500 x 1500,那么达到预期结果的最快方法是什么?
解决方案
由于您的数据集是对称的,我们只能考虑上/下三角形。
library(dplyr)
df[upper.tri(df)] <- NA
我们可以得到长格式的数据,cut
基于 的值breaks
,计算count
每个 Id 的和比例。
df %>%
tidyr::pivot_longer(cols = everything(),
values_drop_na = TRUE) %>%
count(name, value = cut(value, c(-Inf, breaks, Inf), c('0-100000',
'100000-150000', '150000-250000', '250000-500000', '500000+'))) %>%
group_by(name) %>%
mutate(prop = n/sum(n) * 100)
# name value n prop
# <chr> <fct> <int> <dbl>
#1 1 0-100000 1 25
#2 1 150000-250000 1 25
#3 1 250000-500000 2 50
#4 10 250000-500000 3 100
#5 100 500000+ 2 100
#6 1000 250000-500000 1 100
推荐阅读
- css - 顶部导航下拉麻烦
- javascript - 第二卷滑块,HTML 集合与节点列表
- google-apps-script - 谷歌应用脚本电子表格和 Bigquery 查询
- wordpress - 如何使 wordpress 管理屏幕字段成为必需
- javascript - 使用 Flatpickr 在结果中将当前日期设置为“今天”
- javascript - 自动完成如何在建议中写粗体字母
- twitter - Apache Flink:未触发流加入窗口
- c++ - 访问向量迭代器元素以输出
- kotlin - Ktor Netty 服务器发送空响应
- ios - 在 VoiceOver 开启时,在带有按钮的堆栈视图中设置不同的行为