说说R语言的转置

作者: xuzhougeng | 来源:发表于2019-12-03 13:49 被阅读0次

在群里看到了一个问题,他用R语言的转置函数t()对下面形式的数据进行了转置

转置前

转置之后的数据结构如下

转置后

他发现转置之后多了一行,也就是有了geneid这一行,和他预期的不符合。按照预期,geneid这一行应该是成为列名,而不是作为输出的第一行。那么,为什么会出现这个情况呢?这就需要从t()这个函数说起。

使用?t,你会得到关于这个函数的函数说明。在函数的Detials部分中,有这样一段

A data frame is first coerced to a matrix: see as.matrix. When x is a vector, it is treated as a column, i.e., the result is a 1-row matrix.

即,数据框会先用as.matrix()转成矩阵格式,然后再引用t(),最终你对一个数据框使用t()函数时,你会得到一个矩阵,而非原先的data.frame.

举个例子:

L3 <- LETTERS[1:3]
fac <- sample(L3, 10, replace = TRUE)
d <- data.frame(x = 1, y = 1:10, fac = fac)
t(d)
转置前 转置后

因为矩阵要求存放的内容是同一种数据类型,对于输入的数据框而言,一般都会有字符串,数值这些,那么最终都会被转成字符串。

对于最开始的问题而言,因为原先的数据框的第一列是字符串,那么自然而然会把所有的数据都变成字符串,然后把第一列变成第一行。而如果要实现他真正的目的,需要先将第第一行变成行名,然后删掉第一行在转置,也就是

row.names(df) <- df$gene_id
df <- df[,-1]
df <- t(df)

其结果就是先保证原来的数据框里面都是数值数据,而不是让第一列充当行名。

延伸一下,对于超过2维的数组,我们要用到aperm函数才能对数据进行转置。当然,超过二维的转置,你甚至都无法直观感受到这是一个什么过程。

相关文章

  • 说说R语言的转置

    在群里看到了一个问题,他用R语言的转置函数t()对下面形式的数据进行了转置 转置之后的数据结构如下 他发现转置之后...

  • R语言数据转置

    方法1 #读取wet.txt需要转换的目标矩阵,显示原行列。本例中行为sample,列为otu otu<-read...

  • R语言t转置行列名问题

    R语言t数据转置中一个简单的小问题,不注意就会犯错。 我有一个数据框如下: 此时,需要重新转换为数据框,即:dat...

  • 聊聊R语言中t转置函数

    t()给定矩阵或数据框x,t函数返回x的转置。 在对data.frame进行t()操作时需要注意,避免数字变成字符...

  • R语言数据集行列互换技巧

    现在给大家介绍的数据处理技巧是长转宽,也就相当于Excel中的转置,不过用R语言实现的长转宽还有数据合并的功能,自...

  • R当中数据转置

    在以前的操作中转置在excel当中完成,最方便。但是有时候样本数目太多,excel就不行了这里介绍个R当中的转置函...

  • tf.transpose()

    tf.transpose()为转置函数,其中参数perm用来设置需要转置的维度和顺序 img是一个2*2*3 (r...

  • 【数据处理】数据转置命令 xpose

    在Excel中,粘贴选项中数据转置功能。 在R中,使用t()进行数据转置。 在STATA中,也有类似功能。由xpo...

  • C语言-方阵转置

    问题描述:输入一个正整数n(1<=n<=6),根据下式生成一个nn矩阵,将该矩阵转置(行列互换)后输出。a[i][...

  • LearningR-数据处理

    [TOC] 1. R自带函数 1.1 转置 使用函数t()可对一个矩阵或数据框进行转置,对于数据框,行名将变成变量...

网友评论

    本文标题:说说R语言的转置

    本文链接:https://www.haomeiwen.com/subject/aqdcgctx.html