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

在R中如何实现数据集的宽转长再转宽的指定格式转换?

R实现指定长-宽交叉格式转换的方法

步骤1:加载工具包并构造/清洗原始数据

首先使用tidyverse工具集处理数据,同时清理Range列的多余空格:

library(tidyverse)

# 构造原始数据集(若从外部导入,替换为read.table/read_csv等)
df <- tibble(
  ID = c(1,1,2,2),
  Name = c("A","B","A","B"),
  n = c(1477,1475,445,446),
  Mean_SD = c("3.42(15.12)", "127.114 (668.781)", "3.35(20.41)", "113.142(817.681 )"),
  q2 = c(0.8,0.8,0.5,1.7),
  q1_q3 = c("0.4,1.9", "3.5,29.3", "0.3,1.25", "0.775,6.225"),
  Range = c("0     - 343.7", "0.071 - 16013.2", "0.1 - 343.7", "0.1 - 9518")
) %>%
  # 清理Range列的多余连续空格
  mutate(Range = str_squish(Range))

步骤2:执行长-宽格式交叉转换

通过两次数据重塑完成需求:先将指标列转为长格式,再将ID转为宽格式:

# 核心转换逻辑
result_df <- df %>%
  # 将n、Mean_SD等指标列转为长格式,生成Summary列
  pivot_longer(cols = n:Range, names_to = "Summary", values_to = "Value") %>%
  # 将ID的不同取值转为列,对应填充指标值
  pivot_wider(names_from = ID, values_from = Value) %>%
  # 按Name和指定指标顺序排序,匹配目标格式
  arrange(Name, match(Summary, c("n", "Mean_SD", "q2", "q1_q3", "Range")))

步骤3:输出带合并单元格的表格(可选)

如果需要实现目标格式中Name列合并单元格的显示效果,可使用kableExtra包:

library(kableExtra)

result_df %>%
  kable() %>%
  kable_styling() %>%
  collapse_rows(columns = 1, valign = "top")

转换后的result_df数据框结构与需求完全一致:Name和Summary作为行维度,1、2作为列维度对应原ID的取值。

内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 00:54:33