如何从R数据框的组合变量名中拆分标识生成新分类变量
你需要的效果可以通过宽表转长表+列名拆分实现,用tidyverse生态的pivot_longer函数可以一步完成:
第一步:加载依赖包
# 未安装的话先执行 install.packages("tidyverse") library(tidyverse)
第二步:执行转换
假设你的数据集存在变量df中:
df_long <- df %>% pivot_longer( # 保留前4列业务标识字段,剩余都是带X/Y/Z后缀的指标字段 cols = -c(subject, group_type, session_code, exposure), # 按末尾匹配X/Y/Z的下划线拆分列名,不会拆分指标名中间的下划线 names_sep = "_(?=[XYZ]$)", # 拆分后第一部分存指标类型,第二部分存你需要的X/Y/Z维度标识 names_to = c("indicator", "dimension"), values_to = "value" )
转换结果说明
最终得到的长表共6列:
- 前4列为原有的业务标识字段
- 新增
indicator列:存储指标类型(值为beta_early/gamma_peak) - 新增
dimension列:就是你需要的X/Y/Z分类变量 - 新增
value列:存储对应指标+维度的数值
转换后前6行示例:
# A tibble: 60 × 6 subject group_type session_code exposure indicator dimension value <chr> <chr> <chr> <chr> <chr> <chr> <dbl> 1 X1 GRP1 A LOW-CNT beta_early X -6.4 2 X1 GRP1 A LOW-CNT beta_early Y -3.5 3 X1 GRP1 A LOW-CNT beta_early Z 10.2 4 X1 GRP1 A LOW-CNT gamma_peak X -7.7 5 X1 GRP1 A LOW-CNT gamma_peak Y -3.8 6 X1 GRP1 A LOW-CNT gamma_peak Z 7.2
如果你需要按指标类型拆分出单独的X/Y/Z列,可以在上述转换后再用pivot_wider转回对应结构即可。
内容的提问来源于stack exchange,提问作者12666727b9
相关产品推荐
相关产品推荐

