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

如何在R中使用pivot_longer拆分变量名生成时间列?

用pivot_longer将前后测控制组数据集转成长格式

你的代码在names_to和names_sep的用法上有误,导致转换失败,下面是正确的实现方式:

核心问题修正

  • names_to不能用冒号指定变量范围,它需要定义拆分后生成的新列名称(比如变量名列和时间点列)
  • names_sep不能直接传入c("_t1", "_t2"),得用正则表达式匹配后缀,或者用names_pattern精准拆分变量名和时间标记

正确代码示例

先拿一个模拟的同结构数据集演示:

library(tidyverse)

# 模拟你的前后测数据集
df <- structure(
  list(
    vp_code = c("IL1501", "IH2702", "IL1603"),
    HTKS_test1_summe_t1 = c(12, 15, 10),
    HTKS_test1_summe_t2 = c(14, 16, 13),
    SS_summe_gesamt_t1 = c(20, 22, 18),
    SS_summe_gesamt_t2 = c(23, 25, 21),
    non_relevant_var = c("X", "Y", "Z") # 示例非时间相关变量
  ),
  class = "data.frame"
)

# 转换为长格式
data_long <- pivot_longer(
  df,
  cols = matches("_t[12]$"), # 精准匹配所有以_t1/_t2结尾的变量
  names_to = c("variable", "time"), # 拆分出变量名和时间点两个新列
  names_pattern = "(.*)_(t[12])", # 正则分组:捕获前缀和时间后缀
  values_drop_na = TRUE
)

# 查看转换结果
print(data_long)

可选写法(用names_sep)

如果不想写正则,也可以用names_sep拆分,之后再补全时间标记:

data_long <- pivot_longer(
  df,
  cols = contains(c("_t1", "_t2")),
  names_to = c("variable", "time"),
  names_sep = "_t", # 按"_t"拆分
  values_drop_na = TRUE
)

# 把time列的"1"/"2"改成"t1"/"t2"
data_long$time <- paste0("t", data_long$time)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:33:01