生物信息工作的一大苦恼就是经常需要在各种语言之间切换,Java、Bash、R、Python、C/C++、Perl,甚至还有 H/ML5/CSS/Javascript,有些常用,有些隔数月乃至数年用到一次。以至于经常是逻辑上知道一个事情该怎么做,一个功能该怎么实现,却发现找不到合适的 API。尤其是 R 语言,由于和 Java/Python 这样的传统编程语言面向的主要应用场景不同,导致做同样事情的思路差异很大。偶然工作中遇到需要在 R 语言环境下调整 dataframe 列顺序的问题,网上粗略查了一下,多数是用 pandas 这样的第三方 package 来实现,但又懒得为这种小功能去安装 package,查阅 API。所幸找到了这个利用语言本身特性的方法,又谓好记性不如烂笔头,书之以备不时之用。
# 得到 dataframe 的列名数组
cols <- colnames(df)
# 根据需要,生成新的列名顺序,例如,把倒数第一列插入到正数第二列之前,假设目前的列名顺序是
# A B C D E F G H
# 操作以后会变成
# A H B C D E F G
new_cols <- c(cols[1], cols[length(cols)], cols[2:(length(cols) - 1)])
# 然后将 dataframe 按照新的列名顺序排列
df <- df[, new_cols]