web-dev-qa-db-fra.com

Comment puis-je transposer un tibble () dans R

Dans R, la fonction t() est vraiment destinée aux matrices. Lorsque j'essaie de transposer mon tibble avec t() je me retrouve avec une matrice. Une matrice ne peut pas être transformée en tibble avec tibble(). Je finis par passer du temps à stocker des noms de colonnes en tant que variables et à les attacher pendant que j'essaye de refaire une version transposée de mon tibble.

Question: Quel est le moyen le plus simple de transposer un tibble où la première colonne doit devenir les noms de colonne du nouveau tibble et les anciens noms de colonne deviennent la première colonne de mon nouveau tibble.

13
Alex

Comme Sotos l'a mentionné, il vous suffit de déclarer à nouveau votre matrice comme une table:

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

Solution ici: 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')
8
Rahul

J'ai été confronté au même problème et j'ai essayé toutes les solutions susmentionnées et je me suis rendu compte qu'aucune d'entre elles ne conservait réellement les noms des colonnes.

Voici, à mon avis, une meilleure façon de faire de même:

# 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>

Créé le 2018-02-17 par le package reprex (v0.2.0).

6
Indrajeet Patil