【问题标题】:How to convert row names into column from list based data frame如何从基于列表的数据框中将行名转换为列
【发布时间】:2017-04-22 03:32:42
【问题描述】:

我有以下基于列表的数据框:


df <- structure(c(5L, 300L, 251L, 42L, 187L, 16L, 2L, 249L, 158L, 17L, 77L, 
  3L, 2L, 166L, 92L, 16L, 86L, 6L, 5L, 104L, 82L, 17L, 37L, 3L, 1L, 248L, 
  239L, 10L, 81L, 2L, 0L, 136L, 107L, 6L, 24L, 3L, 6L, 164L, 147L, 18L, 83L, 
  3L, 1L, 121L, 96L, 1L, 57L, 2L, 0L, 191L, 153L, 15L, 98L, 3L, 5L, 187L, 
  200L, 8L, 83L, 2L, 1L, 289L, 211L, 19L, 113L, 3L, 2L, 169L, 80L, 13L, 48L, 
  1L), .Dim = c(6L, 12L), .Dimnames = list(c("0610005C13Rik", "0610007P14Rik", 
  "0610009B22Rik", "0610009L18Rik", "0610009O20Rik", "0610010B08Rik"), c("control", 
  "control", "control", "control", "control", "control", "treated", "treated", 
  "treated", "treated", "treated", "treated")))

str(df)
#>  int [1:6, 1:12] 5 300 251 42 187 16 2 249 158 17 ...
#>  - attr(*, "dimnames")=List of 2
#>   ..$ : chr [1:6] "0610005C13Rik" "0610007P14Rik" "0610009B22Rik" "0610009L18Rik" ...
#>   ..$ : chr [1:12] "control" "control" "control" "control" ...
df
#>               control control control control control control treated
#> 0610005C13Rik       5       2       2       5       1       0       6
#> 0610007P14Rik     300     249     166     104     248     136     164
#> 0610009B22Rik     251     158      92      82     239     107     147
#> 0610009L18Rik      42      17      16      17      10       6      18
#> 0610009O20Rik     187      77      86      37      81      24      83
#> 0610010B08Rik      16       3       6       3       2       3       3
#>               treated treated treated treated treated
#> 0610005C13Rik       1       0       5       1       2
#> 0610007P14Rik     121     191     187     289     169
#> 0610009B22Rik      96     153     200     211      80
#> 0610009L18Rik       1      15       8      19      13
#> 0610009O20Rik      57      98      83     113      48
#> 0610010B08Rik       2       3       2       3       1

我想要做的是将行名转换为列我得到这个错误:

> df$gene_symbol <- rownames(df)
Warning message:
In df$gene_symbol <- rownames(df) : Coercing LHS to a list

正确的做法是什么?

【问题讨论】:

  • 它是一个矩阵,而不是一个data.frame,因此只能是一种类型,目前是整数。
  • 把它变成一个整洁的data.frame,也许library(tidyverse); df %&gt;% t() %&gt;% as.data.frame() %&gt;% rownames_to_column('group') %&gt;% gather(gene, value, -group)
  • 将列表转换为数据框:df&lt;-as.data.frame(df)

标签: r dataframe dplyr tibble


【解决方案1】:

首先,正如 cmets 中所指出的,df 是矩阵而不是数据框。你可以检查一下:

> class(df)
#[1] "matrix"
> typeof(df)
#[1] "integer"

所以,如您所见,df 是一个整数矩阵。请注意,矩阵中的数据只能是相同类型的数据,而在数据框中,您可以存储不同类型的数据。这就是矩阵和数据框对象的不同之处。

要实现你所追求的,你可以将矩阵df 转换为数据框,然后做你想做的事:

newdf <- data.frame(df)
> class(newdf)
#[1] "data.frame"
newdf$gene_symbol <- rownames(newdf)

完成!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2017-10-17
    • 2021-07-14
    • 2019-11-16
    相关资源
    最近更新 更多