如何在R中构造电价与可再生能源发电量的联合频率分布表
R生成指定分组的双连续变量联合频率分布表
以下两种方案均可实现需求,默认按照电价0-200欧元(20欧元间隔共10组)、可再生能源发电量0-100000MWh(10000MWh间隔共10组)的规则分组,可根据实际数据范围调整区间边界。
步骤1:构造示例数据
df <- structure(list(DATE = structure(c(18628, 18629, 18630, 18631, 18632, 18633, 18634, 18635, 18636, 18637, 18638, 18639, 18640, 18641, 18642, 18643, 18644, 18645, 18646, 18647), class = "Date"), price = c(45.5804166666667, 47.11125, 43.4683333333333, 47.4579166666667, 50.8945833333333, 52.84375, 44.64375, 55.7233333333333, 51.64125, 51.9604166666667, 51.6475, 52.4683333333333, 67.7625, 46.1591666666667, 63.68875, 50.955, 53.9758333333333, 66.94625, 71.73, 63.4458333333333 ), RES = c(23534.08, 21286.57, 42159.53, 45660.36, 36967.42, 33727.61, 45660.92, 59931.54, 48146.49, 48424.06, 60207.69, 45786.85, 38909.96, 49843.98, 43003.73, 41491, 41655.27, 42133.29, 31207.87, 36045.62)), row.names = c(NA, 20L), class = "data.frame")
方法1:基础R实现
无需加载额外依赖包,代码如下:
# 1. 按规则给两个变量分组 df$price_grp <- cut( df$price, breaks = seq(0, 200, by = 20), # 20欧元间隔,共10组 include.lowest = TRUE, # 包含区间最小值,避免边界值丢失 right = TRUE # 区间左开右闭,可按需调整 ) df$res_grp <- cut( df$RES, breaks = seq(0, 100000, by = 10000), # 10000MWh间隔,共10组 include.lowest = TRUE ) # 2. 生成计数型联合频率表 joint_count <- table(电价分组 = df$price_grp, 可再生能源发电量分组 = df$res_grp) # 3. 如需生成占比型联合频率表,执行以下代码 joint_prop <- prop.table(joint_count)
方法2:tidyverse实现
输出格式更易后续处理,需提前加载dplyr和tidyr包:
library(dplyr) library(tidyr) joint_freq <- df %>% mutate( 电价分组 = cut(price, breaks = seq(0, 200, 20), include.lowest = T), 可再生能源发电量分组 = cut(RES, breaks = seq(0, 100000, 10000), include.lowest = T) ) %>% count(电价分组, 可再生能源发电量分组, name = "频数") %>% pivot_wider( names_from = 可再生能源发电量分组, values_from = 频数, values_fill = 0 # 空组填充为0 )
额外说明
- 如需自定义区间显示标签,可给
cut函数添加labels参数,例如labels = paste0(seq(0,180,20),"-",seq(20,200,20),"€") - 如果数据存在超出当前设置区间的极值,调整
seq的起始、终止值即可 - 如需添加边际合计,可对生成的频率表使用
addmargins()函数
内容的提问来源于stack exchange,提问作者Iro
相关产品推荐
相关产品推荐

