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

在R语言中将宽格式DataFrame转换为长格式的实现方法

解决方案

你可以用R的tidyverse工具包快速完成宽格式到长格式的转换,步骤如下:

1. 加载数据与工具包

首先加载所需包,并构造你的数据框:

library(tidyverse)

# 构造你的数据框
df <- structure(list(A = c(6.53920197406645, 6.12380136266864, 8.01553257692446, 4.62636832157394, 7.58222133679378), 
                     B = c(6.56200038984423, 6.09642510342734, 7.73715705458708, 4.64560570976, 7.23920390575521), 
                     C = c(6.80800376627205, 7.92368949337286, 8.01633247802198, 4.87384339969836, 6.83446360366941), 
                     D = c(6.69117551163928, 5.93689715688807, 8.40247900956586, 4.20000164335469, 6.78643597456963), 
                     E = c(6.30449572859692, 5.99369984659008, 7.86273536430256, 4.11510456695528, 7.11972911832181), 
                     eID = c("hsa:5982", "hsa:3310", "hsa:7849", "hsa:2978", "hsa:7318")), 
                row.names = c("X1053_at", "X117_at", "X121_at", "X1255_g_at", "X1294_at"), 
                class = "data.frame")

2. 转换为指定长格式

运行以下代码完成格式转换:

df_long <- df %>%
  # 将原行名(探针ID)转为单独列
  rownames_to_column(var = "probe_id") %>%
  # 把A-E列转成长格式,提取列名到group,对应值到value
  pivot_longer(cols = A:E, names_to = "group", values_to = "value") %>%
  # 调整列顺序为要求的顺序:group、probe_id、value、eID
  select(group, probe_id, value, eID) %>%
  # 保留数值的6位小数,匹配示例格式
  mutate(value = round(value, 6))

3. 输出为纯文本格式(可选)

如果需要输出为你示例中的空格分隔文本,执行:

write.table(df_long, file = "result.txt", sep = " ", row.names = FALSE, col.names = FALSE, quote = FALSE)

替代方案(使用reshape2包)

如果你习惯用reshape2,可以这样写:

library(reshape2)

df <- rownames_to_column(df, var = "probe_id")
df_long <- melt(df, id.vars = c("probe_id", "eID"), variable.name = "group", value.name = "value")
df_long <- df_long[, c("group", "probe_id", "value", "eID")]
df_long$value <- round(df_long$value, 6)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:25:56