You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:35:25