【问题标题】:How do I transpose a tibble() in R [duplicate]如何在 R 中转置 tibble() [重复]
【发布时间】:2017-08-05 00:55:25
【问题描述】:

在 R 中,t() 函数确实适用于矩阵。当我尝试用t() 转置我的小标题时,我最终得到了一个矩阵。不能使用tibble() 将矩阵制成小标题。我最终花时间将列名存储为变量并在尝试重新制作我的 tibble 的转置版本时附加它们。

问题:转置 tibble 的最简单方法是什么,其中第一列应该成为新 tibble 的列名,而旧列名成为我的新 tibble 的第一列。

【问题讨论】:

  • as_tibble(cbind(nms = names(df), t(df)))
  • 唯一的问题是我所有的替身都变成了角色。
  • sapply(df[,2:length(df)],as.numeric) 我认为这解决了它
  • 不,sapply(df[,2:length(df)],as.numeric) 不起作用。
  • 迟到了,但你可以用%>% mutate_at(2:nrow(df), as.numeric)转换成数字

标签: r dataframe transpose


【解决方案1】:

正如 Sotos 所提到的,您只需将矩阵重新声明为 tibble:

as_tibble(cbind(nms = names(df), t(df)))

【讨论】:

  • 这对我不起作用,并将原始行名列添加为结果 tibble 中额外的、不需要的行,而不是像它应该的列名。
【解决方案2】:

这里的解决方案:https://stackoverflow.com/a/28917212/3880322

library(dplyr)
library(tidyr)
df %>%
    gather(key = var_name, value = value, 2:ncol(df)) %>% 
    spread_(key = names(df)[1],value = 'value')

【讨论】:

    【解决方案3】:

    我遇到了同样的问题并尝试了上述所有解决方案,并意识到它们实际上都没有保留列的名称。

    在我看来,这是一种更好的方法:

    # attaching needed libraries
    library(dplyr)
    library(data.table)
    library(tibble)
    
    # defining the dataframe
    df <- cbind.data.frame(x = rnorm(10), y = rnorm(10))
    
    # custom function to transpose while preserving names
    transpose_df <- function(df) {
      t_df <- data.table::transpose(df)
      colnames(t_df) <- rownames(df)
      rownames(t_df) <- colnames(df)
      t_df <- t_df %>%
        tibble::rownames_to_column(.data = .) %>%
        tibble::as_tibble(.)
      return(t_df)
    }
    
    # using the function
    transpose_df(df)
    #> # A tibble: 2 x 11
    #>   rowname    `1`   `2`     `3`    `4`      `5`   `6`    `7`    `8`    `9`
    #>   <chr>    <dbl> <dbl>   <dbl>  <dbl>    <dbl> <dbl>  <dbl>  <dbl>  <dbl>
    #> 1 x       -1.38  0.752  1.22    0.296 -0.00298 1.50  -0.719 -0.503 -0.114
    #> 2 y        0.618 0.304 -0.0559 -1.27   0.0806  0.156  0.522  0.677  0.532
    #> # ... with 1 more variable: `10` <dbl>
    

    reprex package (v0.2.0) 于 2018 年 2 月 17 日创建。

    【讨论】:

      猜你喜欢
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 1970-01-01
      • 2020-01-27
      • 1970-01-01
      • 2017-06-02
      相关资源
      最近更新 更多