如何在R中拆分DataFrame列名并将指标前缀移至独立列
在R中重塑DataFrame:拆分列名并重组结构
准备工作
首先加载tidyverse包(包含dplyr和tidyr,用于数据重塑),并构造示例数据:
library(tidyverse) # 构造示例DataFrame df <- tibble( Date = c("2022-01-01", "2022-02-01"), user_count_target = c(123, 110), user_count_actual = c(113, 100), user_count_forecast = c(103, 105), sales_target = c(83, 90), sales_actual = c(12, 75), sales_forecast = c(13, 100) )
核心代码
使用pivot_longer一步完成列名拆分和数据重塑:
df_processed <- df %>% pivot_longer( cols = -Date, # 排除Date列,处理其余所有列 names_to = c("metric", ".value"), # 拆分列名为metric(指标名)和值列名(target/actual/forecast) names_sep = "_(?=target|actual|forecast)" # 正则匹配拆分位置:下划线后紧跟指定后缀 ) %>% arrange(Date, metric) # 按日期和指标排序,与目标结构一致
结果说明
运行上述代码后,df_processed即为目标结构:
| Date | metric | target | actual | forecast |
|---|---|---|---|---|
| 2022-01-01 | user_count | 123 | 113 | 103 |
| 2022-01-01 | sales | 83 | 12 | 13 |
| 2022-02-01 | user_count | 110 | 100 | 105 |
| 2022-02-01 | sales | 90 | 75 | 100 |
代码解释
names_sep = "_(?=target|actual|forecast)":使用正则表达式正向预查,确保拆分下划线的位置后面是target/actual/forecast,避免拆分指标名中的下划线(比如user_count里的下划线不会被拆分)。names_to = c("metric", ".value"):.value是特殊参数,告诉pivot_longer将拆分后的第二部分作为值的列名,直接生成target/actual/forecast三列。
内容的提问来源于stack exchange,提问作者user14377943
相关产品推荐
相关产品推荐

