Le stockage d'une liste à l'intérieur d'un bloc de données de l'élément dans la R
Je veux créer une structure de données sous la forme de
Start, End, Elements
3 , 6 , {4,5}
4 , 10 , {7,8,9}
....
Dans les mots, je suis le mouvement d'une bille le long d'une ligne. Le "start" représente le plus à gauche de la position de la balle et la "Fin" représente le plus à droite. Les "Éléments" signifie que j'ai en quelque sorte trouver ces positions particulières. Quelle est la meilleure structure de données à utiliser lorsque le nombre d'éléments peuvent devenir très volumineux? La seule chose que je peux penser est un bloc de données où la 3ème colonne est un bon format de chaîne de caractères. J'aurais alors à analyser la chaîne si je voulais regarder chaque nombre dans l'ensemble. Est-il un meilleur format de données R a ou est-ce?
Merci!
En fait cela a très bien fonctionné et a été facile à mettre en œuvre. Je ne savais pas que un dataframe peut stocker une liste à l'intérieur. Parfait, merci
pourquoi ne pas @joran ou l'OP post cela comme une réponse?
OriginalL'auteur user1357015 | 2013-04-12
Vous devez vous connecter pour publier un commentaire.
L'option mentionné dans mon commentaire, c'est à dire tout simplement à l'aide d'une liste pour l'une des colonnes:
Vous pouvez aussi bien sûr fossé des trames de données entièrement et il suffit d'utiliser une bonne vieille liste (qui pourrait faire plus de sens dans beaucoup de cas, de toute façon):
data.table
, vous pouvez tout faire sur une seule ligne:data.table(Start = 3:4, End = c(6,10), Elements = list(4:5, 7:9))
Oui, mais alors vous devez utiliser données.la table. :p
pas, get - si ça ne tenait qu'à moi, il n'y aurait plus
data.frame
':)Ou, plus directement:
dat <- data.frame(Start = 3:4, End = c(6,10), Elements = I(list(4:5, 7:9)))
OriginalL'auteur joran
Vous pouvez stocker comme un grand bloc de données plutôt que large, et probablement utiliser le
data.table
pour les traiter efficacement. Qui est, faire une ligne par élément, plutôt que d'une ligne par le départ et la fin de la paire deCe serait vous permettent d'effectuer plusieurs types de traitement sur les données très facilement, comme par exemple la détermination de la façon dont de nombreux éléments sont dans chaque gamme:
Cela permettrait également de rendre les données facile à utiliser pour les parcelles à l'aide de la
ggplot
paquet, qui attend généralement des données dans un grand format.Vous pourriez noter que cette structure de données gaspillage puisqu'il se répète de Début et de Fin pour chaque élément. Cependant, les tableaux de données sont stockées de manière très efficace - même si votre liste d'éléments est, littéralement, des millions de longue il peut facilement s'intégrer et être traitées de cette manière. Essayez une ligne comme:
pour une démonstration. Il serait certainement être plus rapide à traiter que de garder chaque élément de la liste en tant que chaîne et se divisant à chaque fois.
OriginalL'auteur David Robinson