如何在R中使用pivot_longer与dplyr合并多列?
解决方案
先构造示例数据集:
library(dplyr) library(tidyr) # 原始数据集 df <- tibble( day = c("2021-01-01", "2021-01-02"), mean_depth = c(20.5, 15.5), depth_sd = c(5.2, 3.9), mean_temp = c(15.8, 15.6), temp_sd = c(3.8, 2.2) )
通过**统一列名格式+pivot_longer**一步转换为目标格式:
df_transformed <- df %>% # 把depth_sd、temp_sd重命名为sd_depth、sd_temp,统一成「统计量_变量名」格式 rename(sd_depth = depth_sd, sd_temp = temp_sd) %>% pivot_longer( cols = -day, # 排除day列,转换其余所有列 names_to = c(".value", "variable"), # .value对应统计量(mean/sd)并生成对应列;variable对应变量名(depth/temp) names_pattern = "(mean|sd)_(.*)" # 正则拆分列名:第一部分是mean/sd,第二部分是变量名 )
转换后的结果:
| day | variable | mean | sd |
|---|---|---|---|
| 2021-01-01 | depth | 20.5 | 5.2 |
| 2021-01-01 | temp | 15.8 | 3.8 |
| 2021-01-02 | depth | 15.5 | 3.9 |
| 2021-01-02 | temp | 15.6 | 2.2 |
关键逻辑说明
原始列名存在mean_变量和变量_sd两种格式,先通过rename统一为统计量_变量的规范格式,再用pivot_longer的正则匹配拆分列名,自动将均值、标准差归入对应列,同时提取变量名。
内容的提问来源于stack exchange,提问作者fishlakeslimno
相关产品推荐
相关产品推荐

