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
相关产品推荐
相关产品推荐

