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

如何在R中使用pivot_wider重塑biomarkHD格式数据?

问题:pivot_wider透视结果不符合预期,如何调整?

原始数据与当前操作

用户提供的数据框代码如下:

id_1 <- c("S78-A01", "S78-A04", "S90-A01", "S90-A04", "S82-A01", "S82-A04", "S94-A01", "S94-A04", "S75-A01", "S75-A04", "S87-A01", "S87-A04")
id_2 <- c("CB-2_1:1024", "CB-2_1:1024", "CB-2_1:1024", "CB-2_1:1024", "CB-2_1:128", "CB-2_1:128", "CB-2_1:128", "CB-2_1:128", "CB-2_1:16", "CB-2_1:16", "CB-2_1:16", "CB-2_1:16")
Gene <- c("AIM2", "AIM2", "AIM2", "AIM2", "AIM2", "AIM2", "AIM2", "AIM2", "AIM2", "C1QB", "C1QB", "C1QB")
value1 <- c(-1.9975984661369099, 4.7789368498721396 , 3.3080754647069801, 6.9507934374320604, 2.55279730894866, 1.38567349551152, 1.99, 4.5115336458523103, 3.2588723737573799, 6.9433118002602097, 2.5897834603682202, 1.4031532547429899)

df <- data.frame(id1 =id_1, 
                 id2=id_2, 
                 Gene=Gene,
                 value1=value1)

当前执行的透视代码:

df %>% pivot_wider(names_from = c("id2","Gene"),
                   values_from =  "value1")

当前得到的结果

id1CB-2_1:1024_AIM2CB-2_1:128_AIM2CB-2_1:16_AIM2CB-2_1:16_C1QB
S78-A01-2NANANA
S78-A044.78NANANA

期望的结果

id2geneval1val2val3
CB-2_1:1024AIM2-1.9975894.7789373.308075
CB-2_1:128AIM22.5527972.5897831.403153
CB-2_1:16C1QB6.9433121.3856731.990000

问题原因与解决方案

错误原因

你当前的pivot_wider操作逻辑完全不符合需求:

  • 代码保留了id1作为行标识,把id2和Gene的组合作为列名,这和你想要的按id2+Gene分组,将组内value1转为多列的逻辑完全相反。

正确实现方式

要得到期望的格式,需要先给每个(id2, Gene)分组内的行添加序号,再以此序号作为列名进行透视:

library(dplyr)
library(tidyr)

# 给每个(id2, Gene)分组内的行生成序号
df_processed <- df %>%
  group_by(id2, Gene) %>%
  mutate(row_num = paste0("val", row_number())) %>%
  ungroup()

# 执行透视
df_wide <- df_processed %>%
  pivot_wider(
    names_from = row_num,  # 用生成的序号作为新列名
    values_from = value1,  # 对应的值是value1
    id_cols = c(id2, Gene) # 保留id2和Gene作为行标识
  )

执行结果示例

运行上述代码后,得到的结果与你期望的格式一致(以示例数据为例):

id2Geneval1val2val3val4
CB-2_1:1024AIM2-1.9975984.7789373.3080756.950793
CB-2_1:128AIM22.5527971.3856731.9900004.511534
CB-2_1:16AIM23.258872NANANA
CB-2_1:16C1QB6.9433122.5897831.403153NA

如果需要过滤掉AIM2在CB-2_1:16的行,可额外添加filter步骤,根据你的实际数据调整即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:55:15