0
votes

Comment fusionner les noms lors de la conversion de la liste imbriquée en cadre de données

J'ai une liste imbriquée avec des noms: xxx

Je voudrais le convertir en cadre de données. Je pourrais le faire avec dplyr :: bind_cols , mais mes noms sont partiellement perdus: xxx

tandis que je voudrais créer des noms informatifs Rejoindre les noms de deux niveaux de liste ensemble. Donc, la sortie résultante serait la suivante: xxx

Comment puis-je atteindre cela de la manière la plus efficace?


0 commentaires

4 Réponses :


2
votes

Je n'ai pas utilisé dplyr strong>, mais data.table strong> et rlist strong>.

Est-ce ce que vous vouliez? P>

library(data.table)
library(rlist)

lst <- list(var1 = list(`0.1` = c(100, 10, 1, 0.1, 0.01), 
                        `0.2` = c(100, 20, 4, 0.8, 0.16), 
                        `0.3` = c(100, 30, 9, 2.7, 0.81), 
                        `0.4` = c(100, 40, 16, 6.4, 2.56), 
                        `0.5` = c(100, 50, 25, 12.5, 6.25), 
                        `0.6` = c(100, 60, 36, 21.6, 12.96), 
                        `0.7` = c(100, 70, 49, 34.3, 24.01), 
                        `0.8` = c(100, 80, 64, 51.2, 40.96), 
                        `0.9` = c(100, 90, 81, 72.9, 65.61)), 
            var2 = list(`0.1` = c(10, 11, 11.1, 11.11, 11.111), 
                        `0.2` = c(10, 12, 12.4, 12.48, 12.496), 
                        `0.3` = c(10, 13, 13.9, 14.17, 14.251), 
                        `0.4` = c(10, 14, 15.6, 16.24, 16.496), 
                        `0.5` = c(10, 15, 17.5, 18.75, 19.375), 
                        `0.6` = c(10, 16, 19.6, 21.76, 23.056), 
                        `0.7` = c(10, 17, 21.9, 25.33, 27.731), 
                        `0.8` = c(10, 18, 24.4, 29.52, 33.616), 
                        `0.9` = c(10, 19, 27.1, 34.39, 40.951)))


temp = lapply(lst, as.data.table)
final = rlist::list.cbind( temp )
final
#>    var1.0.1 var1.0.2 var1.0.3 var1.0.4 var1.0.5 var1.0.6 var1.0.7 var1.0.8
#> 1:    1e+02   100.00   100.00   100.00   100.00   100.00   100.00   100.00
#> 2:    1e+01    20.00    30.00    40.00    50.00    60.00    70.00    80.00
#> 3:    1e+00     4.00     9.00    16.00    25.00    36.00    49.00    64.00
#> 4:    1e-01     0.80     2.70     6.40    12.50    21.60    34.30    51.20
#> 5:    1e-02     0.16     0.81     2.56     6.25    12.96    24.01    40.96
#>    var1.0.9 var2.0.1 var2.0.2 var2.0.3 var2.0.4 var2.0.5 var2.0.6 var2.0.7
#> 1:   100.00   10.000   10.000   10.000   10.000   10.000   10.000   10.000
#> 2:    90.00   11.000   12.000   13.000   14.000   15.000   16.000   17.000
#> 3:    81.00   11.100   12.400   13.900   15.600   17.500   19.600   21.900
#> 4:    72.90   11.110   12.480   14.170   16.240   18.750   21.760   25.330
#> 5:    65.61   11.111   12.496   14.251   16.496   19.375   23.056   27.731
#>    var2.0.8 var2.0.9
#> 1:   10.000   10.000
#> 2:   18.000   19.000
#> 3:   24.400   27.100
#> 4:   29.520   34.390
#> 5:   33.616   40.951


2 commentaires

Pas exactement, comme j'aimerais vraiment séparer avec _ et non . et la nécessité d'importer deux paquets pour cette opération semble plutôt décourageant. Mais appréciez la tentative (+1)


data.table est une alternative valide à dplyr et rlist est une implémentation très puissante d'outils pour travailler avec des objets de liste. Si vous souhaitez avoir un _ entre, vous pouvez simplement le remplacer par data.Table :: setnames () qui fait tout par référence et c'est super rapide. Personnellement, je ne vois aucun problème dans l'importation de plusieurs packages, ils obtiennent le travail rapidement.



1
votes

Vous pouvez utiliser dplyr :: bind_cols pour convertir un cadre de données (comme vous l'avez mentionné), puis modifier les noms à l'aide de la base R en répliquant les noms de premier niveau Nombre de fois: xxx < / Pré>

Si vous connaissez vos noms de niveau interne avant la main, il est encore plus simple: xxx


0 commentaires

0
votes

en base-r xxx

Une autre méthode de base-r (celui-ci est beaucoup plus facile à comprendre) xxx

sortie < / p> xxx


0 commentaires

0
votes

a data.table solution xxx

créé sur 2020-04-30 par le package Reprex (v0.3.0)


0 commentaires