如何将矩阵data_me的行名转换为名为GENE_ID的新列?
问题:将矩阵行名转换为名为GENE_ID的新列
你现在有一个matrix/array类型的对象data_me,行名是ENSG开头的标识符,想要把这些行名提取出来做成一个叫GENE_ID的新列对吧?我给你两个实用的方法,都是R里常用的操作:
方法一:Base R原生实现
不需要额外安装包,用基础R就能搞定:
# 1. 先把矩阵转换为data.frame(因为矩阵无法存储混合类型数据,必须转成data.frame才能加字符型的GENE_ID列) data_df <- as.data.frame(data_me) # 2. 将原矩阵的行名赋值给新列GENE_ID data_df$GENE_ID <- rownames(data_me) # 可选操作:把GENE_ID列移到第一列(如果需要调整列顺序的话) data_df <- data_df[, c("GENE_ID", setdiff(colnames(data_df), "GENE_ID"))] # 可选操作:重置行名(避免保留原矩阵的行名) rownames(data_df) <- NULL
方法二:用dplyr包简化操作
如果你习惯用tidyverse系列工具,dplyr的语法会更简洁直观:
# 如果还没安装dplyr包,先执行安装: # install.packages("dplyr") library(dplyr) data_df <- as.data.frame(data_me) %>% # 添加GENE_ID列,值为原矩阵的行名 mutate(GENE_ID = rownames(data_me)) %>% # 把GENE_ID列移到所有列的最前面 relocate(GENE_ID, .before = everything()) %>% # 重置行名,去掉原矩阵的行名 rownames_to_column(NULL)
执行完任意一种方法后,data_df就是你想要的data.frame,其中GENE_ID列存储了原来的ENSG行名,其他列保留原矩阵的数值数据。
内容的提问来源于stack exchange,提问作者YiHao Chen
相关产品推荐
相关产品推荐

