首页 > 解决方案 > 如何重新排序频率表(OTU/ASV 表)中的列?样品不合格

问题描述

我的实验室正在寻找分析 30 个包含 NGS 数据的环境样本。当我对 tar.bz2 文件进行 tar 处理时,发布的 fastq 文件在新目录中出现故障。我没有想到任何事情,并认为随着我的工作流程的进展,订单将被简单地纠正。这没有发生。现在在频率表中,我的样本列乱序了。这是我的意思的一个例子:

样品-B1 样品-B4 样品-B3 样品-B2 物种
2 0 4 8
14 3 10 9

我想将示例列更改为 B1-B4,如下所示:

样品-B1 样品-B2 样品-B3 样品-B4 物种
2 8 4 0
14 9 10 3

这是一个简化。在我的实际数据中,我有 30 个“样本”列。有没有简单的方法来实现这一点?

提前感谢您的时间:)

标签: rbioinformatics

解决方案


我们可以str_sort在列上使用

library(dplyr)
library(stringr)
df1 <- df1 %>%
   select(str_sort(names(.), numeric = TRUE))

-输出

df1
#  sample-B1 sample-B2 sample-B3 sample-B4 species
#1         2         8         4         0     dog
#2        14         9        10         3     cat

或者另一个选项mixedsort来自gtools

df1 <- df1[gtools::mixedsort(names(df1))]

数据

df1 <- structure(list(`sample-B1` = c(2L, 14L), `sample-B4` = c(0L, 
3L), `sample-B3` = c(4L, 10L), `sample-B2` = 8:9, species = c("dog", 
"cat")), class = "data.frame", row.names = c(NA, -2L))

推荐阅读