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

如何用tidyr包的pivot_longer()函数在R中重塑指定数据框?

使用tidyr::pivot_longer()重塑数据框

原始数据

你有一个1行12列的数据框:

df <- data.frame(q_q10=0,q_q20=0, q_q30=0,q_q40=400,
                 q_q10_low=0,q_q20_low=0,q_q30_low=0,q_q40_low=350,
                 q_q10_up=24,q_q20_up=24,q_q30_up=24,q_q40_up=500)

目标数据

希望将其转换为4行3列的结构,包含quantile、low、up三个变量:

data.frame(quantile=c(0,0,0,400), low=c(0,0,0,350), up=c(24,24,24,500))

解决方案

可以通过tidyr::pivot_longer()结合正则表达式匹配列名来实现,代码如下:

library(tidyr)

df2 <- df %>%
  pivot_longer(
    cols = everything(),
    names_to = c("group", ".value"),
    names_pattern = "q_q(\\d+)(?:_(low|up))?"
  ) %>%
  rename(quantile = `NA`) %>%
  select(quantile, low, up)

代码解释

  • cols = everything():选中所有需要重塑的列。
  • names_to = c("group", ".value"):将列名拆分为两部分,group用来存储q10/q20/q30/q40的数字标识,.value对应最终要生成的列名(quantile、low、up)。
  • names_pattern:用正则匹配列名结构:
    • q_q(\\d+):匹配q_q后的数字部分,捕获为group;
    • (?:_(low|up))?:可选匹配_low或_up后缀,捕获的内容作为.value的取值;不带后缀的列会对应.value为NA,后续通过rename()转为quantile。
  • select()用来调整列顺序,得到目标数据结构。

内容的提问来源于stack exchange,提问作者Chloe_pa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 14:10:02