在R语言中按条件堆叠多列且保留指定变量为单独列的方法求助
数据重塑解决方案
你需要的是多值维度的宽表转长表操作,核心是拆分原始列名的「条件标识」和「情绪类型」两个部分,不需要把所有值堆叠到同一列。以下是两种常用数据分析环境的实现方案:
R (tidyverse 方案)
使用tidyr::pivot_longer的.value参数实现多值输出,不会合并情绪变量到同一列:
library(tidyverse) # 导入数据后执行重塑 df_long <- df %>% pivot_longer( cols = -ID, # 排除ID列,其余列全部参与重塑 names_to = c("Condition", ".value"), # 拆分列名到两个部分,.value表示保留该部分作为输出列名 names_sep = "_" # 列名按下划线拆分 ) %>% mutate(Condition = as.integer(str_remove(Condition, "Cond"))) # 清理条件列的前缀,转成数值
Python (pandas 方案)
使用pd.wide_to_long直接适配带前缀的列结构,一键完成重塑:
import pandas as pd # 导入数据后执行重塑 df_long = pd.wide_to_long( df, stubnames = ["sad", "anxious", "happy"], # 指定要保留的情绪变量前缀 i = "ID", # 主键列 j = "Condition", # 输出的条件列名 sep = "_", # 列名分隔符 prefix = "Cond" # 条件部分的前缀,会自动提取后续数字作为Condition值 ).reset_index() # 调整列名首字母大写匹配预期输出 df_long = df_long.rename(columns={"sad":"Sad", "anxious":"Anxious", "happy":"Happy"})
两种方案运行后都可以直接得到你预期的输出结构,相比普通的melt/堆叠操作,无需后续再做拆分合并的额外处理。
内容的提问来源于stack exchange,提问作者lcm
相关产品推荐
相关产品推荐

