Combinaison de vecteurs de longueur inégale dans une trame de données
J'ai une liste de vecteurs qui sont des séries chronologiques d'inégale longueur. Mon but ultime est de tracer le temps de la série dans un ggplot2
graphique. Je suppose que je suis mieux d'abord la fusion des vecteurs dans un dataframe (où la plus courte des vecteurs sera élargi avec NAs), aussi parce que je veux exporter les données dans un format tabulaire comme .csv pour être lu par d'autres personnes.
J'ai une liste qui contient les noms de tous les vecteurs. C'est bien que les titres des colonnes, être fixées par le premier vecteur, qui est la plus longue. E. g.:
> mylist
[[1]]
[1] "vector1"
[[2]]
[1] "vector2"
[[3]]
[1] "vector3"
etc.
Je sais que le chemin à parcourir est d'utiliser Hadley du plyr
paquet, mais je crois que le problème c'est que ma liste contient les noms des vecteurs, et non les vecteurs eux-mêmes, si je tape:
do.call(rbind, mylist)
- Je obtenir une seule colonne df contenant les noms des dfs je voulais fusionner.
> do.call(rbind, actives)
[,1]
[1,] "vector1"
[2,] "vector2"
[3,] "vector3"
[4,] "vector4"
[5,] "vector5"
[6,] "vector6"
[7,] "vector7"
[8,] "vector8"
[9,] "vector9"
[10,] "vector10"
etc.
Même si je créer une liste avec les objets eux-mêmes, je reçois un vide dataframe :
mylist <- list(vector1, vector2)
mylist
[[1]]
1 2 3 4 5 6 7 8 9 10 11 12
0.1875000 0.2954545 0.3295455 0.2840909 0.3011364 0.3863636 0.3863636 0.3295455 0.2954545 0.3295455 0.3238636 0.2443182
13 14 15 16 17 18 19 20 21 22 23 24
0.2386364 0.2386364 0.3238636 0.2784091 0.3181818 0.3238636 0.3693182 0.3579545 0.2954545 0.3125000 0.3068182 0.3125000
25 26 27 28 29 30 31 32 33 34 35 36
0.2727273 0.2897727 0.2897727 0.2727273 0.2840909 0.3352273 0.3181818 0.3181818 0.3409091 0.3465909 0.3238636 0.3125000
37 38 39 40 41 42 43 44 45 46 47 48
0.3125000 0.3068182 0.2897727 0.2727273 0.2840909 0.3011364 0.3181818 0.2329545 0.3068182 0.2386364 0.2556818 0.2215909
49 50 51 52 53 54 55 56 57 58 59 60
0.2784091 0.2784091 0.2613636 0.2329545 0.2443182 0.2727273 0.2784091 0.2727273 0.2556818 0.2500000 0.2159091 0.2329545
61
0.2556818
[[2]]
1 2 3 4 5 6 7 8 9 10 11 12
0.2824427 0.3664122 0.3053435 0.3091603 0.3435115 0.3244275 0.3320611 0.3129771 0.3091603 0.3129771 0.2519084 0.2557252
13 14 15 16 17 18 19 20 21 22 23 24
0.2595420 0.2671756 0.2748092 0.2633588 0.2862595 0.3549618 0.2786260 0.2633588 0.2938931 0.2900763 0.2480916 0.2748092
25 26 27 28 29 30 31 32 33 34 35 36
0.2786260 0.2862595 0.2862595 0.2709924 0.2748092 0.3396947 0.2977099 0.2977099 0.2824427 0.3053435 0.3129771 0.2977099
37 38 39 40 41 42 43 44 45 46 47 48
0.3320611 0.3053435 0.2709924 0.2671756 0.2786260 0.3015267 0.2824427 0.2786260 0.2595420 0.2595420 0.2442748 0.2099237
49 50 51 52 53 54 55 56 57 58 59 60
0.2022901 0.2251908 0.2099237 0.2213740 0.2213740 0.2480916 0.2366412 0.2251908 0.2442748 0.2022901 0.1793893 0.2022901
mais
do.call(rbind.fill, mylist)
data frame with 0 columns and 0 rows
J'ai essayé de convertir les vecteurs de dataframes, mais il n'y a pas de cbind.fill
fonction, de sorte plyr se plaint de ce que la dataframes sont de longueur différente.
Donc mes questions sont:
- Est-ce la meilleure approche? Gardez à l'esprit que les objectifs sont: a) un ggplot2 graphique et b) un tableau avec les temps de la série, pour être visualisé en dehors de la R
- Quelle est la meilleure façon d'obtenir une liste d'objets de commencer avec une liste des noms de ces objets?
- Quel est le meilleur type de graphique pour mettre en évidence les modèles de 60 timeseries? L'échelle est la même, mais je prédis il y aura beaucoup de overplotting. Puisque c'est une analyse de cohorte, il pourrait être utile d'utiliser la couleur pour mettre en évidence les différentes cohortes en termes de récence (comme une variable continue). Mais comment éviter overplotting? Les différences seront minimes si le facettage peut laisser le spectateur arrive pas à saisir la différence.
source d'informationauteur Roberto
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pouvez être en train d'approcher cette façon le mal:
Si vous avez le temps de la série d'inégale longueur, alors la meilleure chose à faire est de les garder dans le temps et
merge
. La plupart du temps de la série de paquets de permettre cela. Donc, vous allez vous retrouver avec un multi-variable aléatoire série de temps et chaque valeur est correctement associé à la même date.Alors mettez vos séries en
zoo
objets,merge
eux, puis d'utiliser monqplot.zoo
function à la parcelle. Qui traitera de commutation dezoo
dans un long bloc de données.Voici un exemple:
Si vous le faites tout simplement parce que ggplot2 (ainsi que beaucoup d'autres choses) comme des blocs de données, puis ce qu'il vous manque, c'est que vous avez besoin des données à long format des trames de données. Oui, vous venez de mettre l'ensemble de vos variables de réponse dans une colonne concaténées. Ensuite, vous avez 1 ou plusieurs autres colonnes qui permettent d'identifier ce qui rend les réponses différentes. C'est la meilleure façon de l'avoir mis en place pour des choses comme ggplot.
Vous ne pouvez pas. Un
data.frame()
doit être de forme rectangulaire; mais les règles de recyclage assure que la plus courte des vecteurs d'obtenir étendue.Sorte que vous pouvez avoir une autre erreur, ici, les données que vous souhaitez
rbind
n'est pas approprié, peut-être ? -- mais c'est dur de le dire, car vous n'avez pas à fournir un exemple reproductible.Modifier Donné votre mise à jour, vous obtenez précisément ce que vous avez demandé: une liste de noms se combine par
rbind
. Si vous souhaitez que les données sous-jacentes apparaissent, vous devez faire appel àget()
ou d'une autre les données de l'accesseur.