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

如何用tidyr将含预测值与置信区间的单行数据框重塑?

解决方法:用pivot_longer结合正则重塑数据

嘿,我懂你现在的困扰——你直接用pivot_longer得到了每行对应一个原列的长格式,但这并不是你想要的结果。我们需要把带不同前缀的列(prob.、L.prob.、U.prob.)对应到每个度假类型的三个字段(预测值、置信下限、置信上限)。下面是一步到位的解决方案:

完整代码实现

library(tidyverse)

# 你的原始数据
prediction <- structure(list(prob.no_vacation = 0.117514519600163, prob.camping = 0.143492608263017, prob.day_trip = 0.111421926419948, prob.hotel = 0.317703454494376, prob.other = 0.046127755158774, prob.zimmer = 0.263739736063722, L.prob.no_vacation = 0.0862080033692849, L.prob.camping = 0.108591033069218, L.prob.day_trip = 0.0824426383991041, L.prob.hotel = 0.269819723528852, L.prob.other = 0.0280805399319794, L.prob.zimmer = 0.21869871196767, U.prob.no_vacation = 0.158221505149101, U.prob.camping = 0.187255261510882, U.prob.day_trip = 0.148934253891266, U.prob.hotel = 0.369781447354612, U.prob.other = 0.0748802031049477, U.prob.zimmer = 0.314325057616515), row.names = c(NA, -1L), class = c("tbl_df", "tbl", "data.frame"))

# 核心重塑步骤
prediction_long <- prediction %>%
  pivot_longer(
    cols = everything(),  # 选中所有列,无需手动指定范围
    names_to = c(".value", "vacation_type"),  # 拆分列名为「值类型」和「度假类型」
    names_pattern = "(.*\\.)prob\\.(.*)"  # 正则表达式匹配列名结构
  ) %>%
  rename(
    estimate = prob.,     # 把默认的prob.列名改成更直观的estimate
    lower_ci = L.prob.,   # 重命名置信下限列
    upper_ci = U.prob.    # 重命名置信上限列
  )

# 查看最终结果
print(prediction_long)

代码解释

  1. cols = everything():自动选中所有列,避免手动列名范围出错,更灵活。
  2. names_to = c(".value", "vacation_type"):
    • .value是pivot_longer的特殊参数,表示将列名中匹配的部分作为新的列名(比如prob.、L.prob.会变成后续的列)。
    • vacation_type用来存储从列名中提取的度假类型(如no_vacation、camping)。
  3. names_pattern = "(.*\\.)prob\\.(.*)":正则表达式的作用是拆分原列名:
    • (.*\\.):匹配前缀部分(prob.、L.prob.、U.prob.),\\.是转义的点号(因为正则中点号代表任意字符)。
    • prob\\.:固定的分隔符,用来区分前缀和度假类型。
    • (.*):匹配后续的度假类型名称。
  4. rename():把自动生成的列名改成更符合业务逻辑的名称,方便后续分析。

最终输出结果

执行代码后,你会得到如下格式的数据:

# A tibble: 6 × 4
  vacation_type estimate lower_ci upper_ci
  <chr>            <dbl>    <dbl>    <dbl>
1 no_vacation      0.118    0.0862   0.158 
2 camping          0.143    0.109    0.187 
3 day_trip         0.111    0.0824   0.149 
4 hotel            0.318    0.270    0.370 
5 other            0.0461   0.0281   0.0749
6 zimmer           0.264    0.219    0.314 

这样就完美实现了你的需求:每行对应一个度假类型,同时保留预测值、置信区间上下限三个独立列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 21:27:27