r - 如何重新排序频率表(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 个“样本”列。有没有简单的方法来实现这一点?
提前感谢您的时间:)
解决方案
我们可以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))
推荐阅读
- reactjs - Next.js:如何从元素中获取应用样式?
- postgresql - 如何一次添加多个 sql_query 绑定?
- excel - 如何登记产品在工厂停留的时间?
- javascript - nextjs加nextauth无法配置jwt
- matplotlib - 使用 plt.fill_between(x,y) 计算填充区域
- python - 如何将复选框转换为绘图
- pandas - 如何使用 twinx 在同一个图表上绘制条形图和线图,但不适用于 seaborn
- python - Discord PY 无法更改发送消息的通道
- java - Java docker 执行获取标准输入
- reactjs - 我有一个打字稿问题,已经问了几个人,很多人在升级版本中得到了解决方案。但不为我工作