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

如何将含两列的DataFrame转换为FASTA格式?

解决R DataFrame转FASTA格式单列结构的问题

问题描述

现有如下R DataFrame:

df1 <- data.frame(x = c(">Seq1", ">Seq2"), y = c("AAAA", "BBBB"))
# 输出结构:
#       x    y
# 1 >Seq1 AAAA
# 2 >Seq2 BBBB

需要将其转换为符合FASTA格式的单列DataFrame,最终结构如下:

df2 <- data.frame(x = c(">Seq1", "AAAA", ">Seq2", "BBBB"))
# 输出结构:
#       x
# 1 >Seq1
# 2  AAAA
# 3 >Seq2
# 4  BBBB

解决方案

方法1:Base R 原生实现

无需额外安装包,通过按行处理+扁平化列表实现:

# 按行提取ID和序列,生成嵌套列表
row_elements <- apply(df1, 1, function(r) c(r["x"], r["y"]))
# 扁平化列表并转为DataFrame
df2 <- data.frame(x = unlist(row_elements), stringsAsFactors = FALSE)

方法2:Tidyverse 工具包实现(更直观)

如果已安装tidyverse,可以用rowwise+unnest快速处理:

library(tidyverse)

df2 <- df1 %>%
  rowwise() %>%
  # 将每行的ID和序列打包为列表
  mutate(seq_pair = list(c(x, y))) %>%
  # 展开列表为多行
  unnest(seq_pair) %>%
  # 重命名并保留目标列
  rename(x = seq_pair) %>%
  select(x)

方法3:Tidyverse 另一种写法(pivot_longer)

用宽表转长表的方式,再调整顺序:

library(tidyr)

df2 <- df1 %>%
  # 将所有列合并为单列
  pivot_longer(cols = everything(), names_to = NULL, values_to = "x") %>%
  # 重新排序,确保ID和对应序列相邻
  arrange(rep(1:nrow(df1), 2))

验证结果

运行任意一种方法后,打印df2即可得到符合要求的FASTA格式单列结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:45:38