将数据框转为矩阵时如何取消列表化并保留行列名?
解决方法:将字符型DataFrame转换为带行/列名的数值矩阵
你的问题核心有两个:一是原DataFrame里的数值实际是字符类型(从dput输出的字符串格式能看出来),二是unlist()会把DataFrame拆解成一维向量,转成矩阵后直接丢失了原有的行列结构与名称。
按下面的步骤就能轻松解决:
- 先把DataFrame的所有列转换为数值类型
- 再将转换后的DataFrame转为矩阵,行名和列名会自动保留
具体代码
# 把字符型DataFrame转为数值型DataFrame,保留行名 df_num <- data.frame(lapply(df, as.numeric), row.names = rownames(df)) # 转换为矩阵 mat <- as.matrix(df_num) # 查看结果 > mat TCGA.2K.A9WE.01A TCGA.2Z.A9J1.01A TCGA.2Z.A9J3.01A TCGA.2Z.A9J5.01A TCGA.2Z.A9J6.01A AAAS 3.333704 3.349254 3.303497 3.380963 3.368247 AARSD1 3.261916 3.325106 3.336665 3.385487 3.313931 AASS 2.980720 3.053135 3.089821 3.005199 3.282654 ABHD11 3.454424 3.630342 3.701725 3.574224 3.586874 ABHD14A 3.231475 3.240146 3.273832 3.434840 3.339303
更简洁的一步写法
也可以不用单独生成数值型DataFrame,直接一步转换:
mat <- as.matrix(sapply(df, as.numeric))
最终得到的矩阵会完整保留原DataFrame的行名、列名,同时所有元素都转为数值类型。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

