如何在R中将小时值宽格式数据框重构为指定格式?
解决方案
使用tidyr包的pivot_longer和pivot_wide函数组合即可完成数据重构,具体步骤如下:
1. 加载依赖包
library(tidyverse)
2. 将宽表转长表并提取小时信息
把t_0h到t_6h的列转换为长格式,同时从列名中提取小时数字并转为整数类型:
df_long <- df %>% pivot_longer( cols = starts_with("t_"), # 选择所有以t_开头的列 names_to = "Hour", # 原列名存入Hour列 values_to = "value" # 原列值存入value列 ) %>% mutate(Hour = as.integer(str_extract(Hour, "\\d+"))) # 从Hour列提取数字并转整数
3. 转换为目标宽表格式
将loc列的A、B两个类别转为t_A和t_B列,以CharDate和Hour作为分组依据:
df_final <- df_long %>% pivot_wider( names_from = loc, # 以loc列的取值作为新列名 values_from = value, # 对应的值填入新列 names_prefix = "t_" # 给新列名添加前缀t_ )
验证结果
运行print(df_final)可查看最终格式:
print(df_final)
输出示例:
# A tibble: 14 × 4 CharDate Hour t_A t_B <chr> <int> <dbl> <dbl> 1 xyz_20110101 0 2 3 2 xyz_20110101 1 20 27.3 3 xyz_20110101 2 5 7 4 xyz_20110101 3 12 14.3 5 xyz_20110101 4 13 15.3 6 xyz_20110101 5 25 28.3 7 xyz_20110101 6 2 14 8 xyz_20110102 0 4 5 9 xyz_20110102 1 33.3 40 10 xyz_20110102 2 9 11 11 xyz_20110102 3 16.7 19 12 xyz_20110102 4 17.7 20 13 xyz_20110102 5 31.7 35 14 xyz_20110102 6 28 40
内容的提问来源于stack exchange,提问作者timetraveller007
相关产品推荐
相关产品推荐

