栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > R语言

R语言矩阵的转化

R语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

R语言矩阵的转化

在使用R语言的过程中,我们会遇到很多问题,比如说长宽矩阵的转化,不能每一次都是手动处理,这样也很麻烦,实现长宽矩阵的转化的方式很多,我们只需要掌握其中一对就好。

1、宽变长
这里我随意设置一个矩阵,作为测试数据

#测试数据的生成,10x10
data=matrix(1:100,nrow=10)
colnames(data)=paste0('sample',1:10)
data=data.frame(gene_name=paste0('gene',1:10),
                data)

根据gene_name这一列进行转化,变成一个只有三列的数据

measure_name=setdiff(colnames(data),
                     c('gene_name'))

library(data.table)
#id.vars:合并的过程中通过那一列进行合并
#measure.vars:将那些列合并在一起
#variable.name:将那些列合并在一起后,新列的名称
#value.name:矩阵内部的数值,赋予一个新的名称
data1=melt(data,
           id.vars='gene_name', 
           measure.vars=measure_name,
           variable.name = "sample", 
           value.name = "expr")
head(data1)


也可以同时根据多列进行合并

#测试数据
data2=data.frame(gene_name1=data$gene_name,data)
data2

measure_name=setdiff(colnames(data2),
                     c('gene_name','gene_name1'))

library(data.table)
#id.vars:合并的过程中通过那一列进行合并
#measure.vars:将那些列合并在一起
#variable.name:将那些列合并在一起后,新列的名称
#value.name:矩阵内部的数值,赋予一个新的名称
data3=melt(data2,
           id.vars=c('gene_name','gene_name1'), 
           measure.vars=measure_name,
           variable.name = "sample", 
           value.name = "expr")
head(data3)


2、长变宽
我们分别以前面data1和data3为例

head(data1)

library(tidyr)
dat1=spread(data1,key=gene_name,value=expr)
dat1

如果是data3呢?如果直接仿照上面的这种,会直接出现问题,如下:

dat2=spread(data3,key=gene_name1,value=expr)
dat2

怎么解决呢?

dat2=spread(data3,key=sample,value=expr)
dat2

看到这里是不是很懵,其实在使用spread函数进行转化的过程中,有两个参数很重要。

value:就是需要填充到矩阵中的数值
key:选择的这一列以后会作为矩阵的列名,而至于其他的列名,会根据这两个进行填充,这也是为什么会出现前面全是NA的情况

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/855595.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号