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

R语言中data.frame数据从宽格式转换为长格式的实操问题

R语言宽表转长表实现方法

你可以通过两种主流方式实现需求:

方法1:使用tidyverse包的pivot_longer函数(最常用)

首先确保你已经安装并加载tidyverse包,示例代码如下:

# 加载依赖包
library(tidyverse)

# 模拟你的原始数据(实际使用时替换为你自己的data.frame即可)
df <- data.frame(
  new_death = c(2,5,7),
  beds_covid = c(120,150,135),
  beds_noncrit = c(300,320,310),
  beds_icu_covid = c(45,52,48),
  icu_covid = c(23,28,25),
  vent_covid = c(12,15,13),
  hosp_covid = c(98,112,105)
)

# 执行宽转长操作
df_long <- df %>% 
  pivot_longer(
    cols = !new_death, # 排除标识列new_death,其余所有列参与转换
    names_to = "variable", # 原列名存储到variable列
    values_to = "value" # 原对应数值存储到value列
  )

转换后3行原始数据会生成18行(3×6个非标识列)长表数据,完全符合要求。

方法2:使用reshape2包或基础R实现

如果不想依赖tidyverse生态,可以用reshape2的melt函数实现:

# 加载reshape2包
library(reshape2)

df_long <- melt(
  df,
  id.vars = "new_death", # 指定标识列
  variable.name = "variable",
  value.name = "value"
)

如果完全不用第三方包,也可以用基础R的reshape函数实现:

df_long <- reshape(
  df,
  idvar = "new_death",
  varying = list(names(df)[-1]),
  v.names = "value",
  timevar = "variable",
  times = names(df)[-1],
  direction = "long"
)
# 去掉自动生成的行号属性
row.names(df_long) <- NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 03:36:03