如何在R中按年份映射值,将能源数据重塑为指定行列格式
R数据重塑:将能源源转列、年份转行
针对你的数据结构(能源源名称列 + 成对的年份/数值列),可以通过以下R代码完成数据重塑:
代码实现
# 加载核心处理包 library(tidyverse) # 替换为你的实际数据框名称 energy_data <- your_data_frame_name # 替换为能源源名称列的实际列名 source_col <- "source_name" # 定义年份列(偶数列:18到140)和数值列(奇数列:19到141)的索引 year_cols_idx <- seq(18, 140, by = 2) value_cols_idx <- seq(19, 141, by = 2) # 生成年份列与数值列的名称配对 col_pairs <- tibble( year_col = names(energy_data)[year_cols_idx], value_col = names(energy_data)[value_cols_idx] ) # 将成对的年份-数值列转成长格式 long_data <- map_dfr(1:nrow(col_pairs), function(i) { energy_data %>% select(all_of(source_col), all_of(col_pairs$year_col[i]), all_of(col_pairs$value_col[i])) %>% rename(year = all_of(col_pairs$year_col[i]), value = all_of(col_pairs$value_col[i])) }) # 将能源源转为列,年份作为行 final_data <- long_data %>% pivot_wider(names_from = all_of(source_col), values_from = value) %>% arrange(year) # 按年份升序排序(可选)
代码说明
- 包加载:使用
tidyverse包含的dplyr(数据处理)和tidyr(数据重塑)工具,满足全流程操作需求。 - 列定位:精准筛选年份列(18-140的偶数列)和对应数值列(19-141的奇数列),避免列名混乱导致的错误。
- 长格式转换:通过
map_dfr遍历每一对年份-数值列,将分散的年份和数值整合到统一的year和value列中,为后续重塑做准备。 - 宽格式转换:用
pivot_wider将能源源名称转为列、年份作为行,实现数值按年份与能源源的对应映射。
注意事项
- 替换代码中的
your_data_frame_name为你的实际数据框名称。 - 替换
source_col为你的能源源名称列的真实列名(如"能源类型")。
内容的提问来源于stack exchange,提问作者deepa palariya
相关产品推荐
相关产品推荐

