【生信笔记】数据框按照特定顺序修改列名
在前期我们为大家介绍了【R包荟萃】热图绘制工具:pheatmap包详解,其中想要绘制分组的热图时需要两个数据,即原始表达矩阵mat和分组信息annotation_col,其中annotation_col指的是表达矩阵中列的分组信息,需要使用相应的列名称来匹配数据和注释中的列,格式要求为数据框。
在实际绘图中我们发现当不对列进行聚类时,数据展示是以表达矩阵的列名顺序显示结果,而此时组别的信息将也会按照列名的顺序进行排列,如图所示组别将会凌乱,不会依序显示。
pheatmap(mat,
cluster_cols = F,
cluster_rows = T,
scale="row",
annotation_col = annotation_col,
annotation_colors = ann_colors,
show_rownames = F,
show_colnames = F,
fontsize = 10,
border_color = NA,
color = colorRampPalette(c("blue","white","red"))(50))
如果想要组别按照GroupA和GroupB的顺序显示,解决的办法其实就是列名按照组别的顺序重新排列,最简单的办法就是在Excel中重新修改列名顺序,但是如果数据量多的话则会非常难使,那么既然学习了编程,有没有什么简单的方法能够实现这一目的,即数据框按照特定顺序修改列名呢?
这时,我们需要用到match函数,匹配函数(match)返回一个位置向量,表示 x 匹配table的位置。
x:被匹配的向量
table:其他向量跟该向量进行匹配,x向量中的每一个元素都跟table向量中的每一个元素进行比较;
nomatch:不匹配时,函数返回的整数值。默认值是NA
incomparables :指定不能匹配的值的向量,在x向量中的任何值,如果是incomparables参数中的值,那么返回nomatch参数的值。由于历史原因,FALSE 和NULL相等。
因此我们可以利用
a<- match(rownames(annotation_col), colnames(mat))
获得一个组别的列名在表达矩阵中的位置向量,然后再利用数据框操作命令重新排列
mat[,a]
这时再重新绘制热图就可以看到组别按照顺序排列了。
致谢:感谢生信地球花花是小洁的分身的提示。
赞 (0)