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

R语言如何使用tidyr::pivot_longer将指定宽表转换为目标长表格式

实现代码

首先需要加载tidyr包(属于tidyverse系列),步骤如下:

1. 构造样例数据

df <- structure(list(ID = 1L, OPEN = 13L, ANSWER = 15L, CLOSE = 17L, 
    OPEN_BY = "ABC", CLOSE_BY = "XXYZ"), class = "data.frame", row.names = c(NA, -1L))

2. 转换代码

library(tidyr)

df %>%
  # 统一列名格式为「动作_属性」,属性分为date(日期值)和user(操作用户)
  rename_with(
    .fn = ~ ifelse(!grepl("_BY", .x), paste0(.x, "_date"), sub("_BY", "_user", .x)),
    .cols = -ID
  ) %>%
  pivot_longer(
    cols = -ID,
    names_to = c("action_type", ".value"),
    names_sep = "_"
  ) %>%
  # 移除不需要的动作类型列
  select(-action_type)

输出结果

# A tibble: 3 × 3
     ID  date user 
  <int> <int> <chr>
1     1    13 ABC  
2     1    15 NA   
3     1    17 XXYZ

注:你预期结果里的用户值XYZ为笔误,原数据中CLOSE_BY对应值为XXYZ,输出与原数据保持一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 14:24:03