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

如何将竖线分隔的两列表格转换为宽格式或长格式data frame

基于tidyverse的完整解决代码

假设你的原始输入数据框命名为cmo_raw,三列列名分别为barcode(第一列的细胞barcode)、cmo_list(第二列的|分隔CMO编号)、umi_list(第三列的|分隔UMI计数),如果你的列名不同可对应替换。

# 加载依赖包
library(tidyverse)

# 生成期望输出B(长格式)
cmo_long <- cmo_raw %>%
  # 同时拆分CMO和UMI列,保证两者一一对应不错位
  separate_rows(cmo_list, umi_list, sep = "\\|", convert = TRUE) %>%
  # 重命名为你要求的列名
  rename(feature_call = cmo_list, num_umis = umi_list)

# 生成期望输出A(宽格式)
cmo_wide <- cmo_long %>%
  pivot_wider(
    id_cols = barcode,
    names_from = feature_call,
    values_from = num_umis,
    values_fill = 0
  )

关键说明

  • 你之前用separate_rows()没成功大概率是没有同时传入两个需要拆分的列,单独拆分两列会出现CMO和UMI不匹配的问题,同时传入即可解决
  • sep = "\\|"是因为|是正则特殊字符,需要双反斜杠转义才能被识别为普通分隔符
  • convert = TRUE会自动把UMI计数从字符串转为数值类型,无需额外转换
  • 你给出的输出B示例中的CMO304不在你提供的输入数据范围内,属于示例笔误,实际运行会输出输入数据包含的所有CMO对应结果

内容的提问来源于stack exchange,提问作者bud.dugong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:24:03