Comment convertir une liste en bloc de données dans R
Il existe de nombreux cas dans lesquels vous souhaiterez peut-être convertir une liste en bloc de données dans R. Ce didacticiel explique trois manières différentes de le faire.
Méthode 1 : Base R
L’extrait de code suivant montre comment convertir une liste en bloc de données en utilisant uniquement la base R :
#create list my_list <- list(letters[1:5], letters[6:10]) my_list [[1]] [1] "a" "b" "c" "d" "e" [[2]] [1] "f" "g" "h" "i" "j" #convert list to data frame data.frame(t(sapply(my_list,c))) X1 X2 X3 X4 X5 1 a b c d e 2 f g h i j
Dans cet exemple, sapply convertit la liste en matrice, puis data.frame convertit la matrice en bloc de données. Le résultat final est un bloc de données de deux lignes et cinq colonnes.
Méthode 2 : tableau de données
L’extrait de code suivant montre comment convertir une liste de deux listes imbriquées en un bloc de données avec deux lignes et trois colonnes à l’aide de la fonction rbindlist de la bibliothèque data.table :
#load data.table library library(data.table) #create list my_list <- list(a = list(var1 = 1, var2 = 2, var3 = 3), b = list(var1 = 4, var2 = 5, var3 = 6)) my_list $a $a$var1 [1] 1 $a$var2 [1] 2 $a$var3 [1] 3 $b $b$var1 [1] 4 $b$var2 [1] 5 $b$var3 [1] 6 #convert list to data frame rbindlist(my_list) var1 var2 var3 1: 1 2 3 2: 4 5 6
Cela donne un tableau de données avec deux lignes et trois colonnes. Si vous souhaitez convertir cette table de données en bloc de données, vous pouvez simplement utiliser as.data.frame(DT) .
Cette méthode convertit une liste en bloc de données plus rapidement que la méthode précédente si vous travaillez avec un très grand ensemble de données.
Méthode 3 : Dplyr
L’extrait de code suivant montre comment convertir une liste de deux listes imbriquées en un bloc de données avec deux lignes et trois colonnes à l’aide de la fonction bind_rows de la bibliothèque dplyr :
#load library library(dplyr) #create list my_list <- list(a = list(var1 = 1, var2 = 2, var3 = 3), b = list(var1 = 4, var2 = 5, var3 = 6)) my_list $a $a$var1 [1] 1 $a$var2 [1] 2 $a$var3 [1] 3 $b $b$var1 [1] 4 $b$var2 [1] 5 $b$var3 [1] 6 #convert list to data frame bind_rows(my_list) # A tibble: 2 x 3 var1 var2 var3 1 1 2 3 2 4 5 6
Il en résulte un bloc de données avec deux lignes et trois colonnes.
Cette méthode a également tendance à fonctionner plus rapidement que la base R lorsque vous travaillez avec de grands ensembles de données.