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

如何将data.frame中斜杠分隔的基因ID单列拆分为每个ID单独一列

实现方法

你可以通过以下两种常用方案实现需求,均可得到和你预期完全一致的结果:

方案1:tidyverse生态实现(代码简洁,可读性高)

使用tidyr包的separate函数直接拆分列:

# 构造示例原始数据,你可以替换成你自己的data.frame
df <- data.frame(
  rows = c("row1", "row2"),
  x = c("5788/3689/5230/8826/302/79026/203068/476", "3312/6892/811/3123/3122")
)

# 加载包
library(tidyr)

# 拆分列
df_result <- df %>%
  # x为要拆分的原始列名,into指定拆分后新列名,sep为分隔符,fill=right表示短行右侧补空
  separate(x, into = paste0("v", 1:8), sep = "/", fill = "right")

如果不知道拆分后的最大列数,可以提前计算:

max_col <- max(sapply(strsplit(df$x, "/"), length))
# 然后把into参数改成 paste0("v", 1:max_col) 即可

方案2:base R实现(无需安装额外依赖包)

# 构造示例原始数据
df <- data.frame(
  rows = c("row1", "row2"),
  x = c("5788/3689/5230/8826/302/79026/203068/476", "3312/6892/811/3123/3122")
)

# 按分隔符拆分所有字符串
split_vec <- strsplit(df$x, "/")
# 计算最大拆分长度
max_len <- max(sapply(split_vec, length))
# 短字符串补空值,对齐长度
split_fill <- lapply(split_vec, function(item) c(item, rep("", max_len - length(item))))
# 合并为结果数据框
df_result <- cbind(df["rows"], setNames(do.call(rbind, split_fill), paste0("v", 1:max_len)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:27:04