2017-08-02 4 views
0

J'ai un data.frame dans lequel se trouvent deux colonnes, une variable Sample_ID et une variable de valeur. Chaque échantillon (dont il existe 1971) a 132 points individuels. L'objet entier est seulement ~ 3000000 octets, ou environ 0,003 gigaoctets (selon object.size()). Pour une raison quelconque, lorsque j'essaie de diffuser l'objet en format large, il émet une erreur disant qu'il ne peut pas allouer de vecteurs de taille 3,3 Go, ce qui est plus de 3 ordres de grandeur plus grand que l'objet original.Objets dcast de magnitude supérieure à l'objet d'origine

La sortie que j'espère est de 1 colonne pour chaque échantillon, avec 132 lignes de données pour chaque colonne.

Le code dcast J'utilise est le suivant:

df_dcast = dcast(df, value.var = "Vals", Vals~Sample_ID) 

Je fourniraient l'ensemble de données pour la reproductibilité, mais parce que ce problème a à voir avec la taille de l'objet, je ne pense pas un sous-ensemble de celui-ci contribuerait à et je ne suis pas sûr de savoir comment publier facilement l'ensemble de données complet. Si vous savez comment publier l'ensemble de données complet ou si vous pensez qu'un sous-ensemble serait utile, faites-le moi savoir.

Merci

+0

peut-être intéressant de regarder les matrices creuses. –

+0

@RichardTelford D'après mon premier regard, il semble que les matrices de réserve soient moins efficaces si vos données ont peu de zéros, et mes données n'ont aucun zéros, alors je pense que celles-ci seraient moins efficaces? Mais j'ai l'impression qu'il y a quelque chose d'autre qui se passe ici parce que je ne peux pas penser à une raison pour laquelle un objet large avec exactement les mêmes données devrait être beaucoup plus grand qu'un objet long. Mon hypothèse est que le code de dcast que j'utilise fait autre chose que ce que je veux qu'il fasse et je ne peux pas le dire parce que c'est lancer et erreur avant qu'il ne se termine. Je vais l'essayer sur un sous-ensemble maintenant et voir ce qu'il fait. –

Répondre

0

Ok je compris ce qui se passait mal. Il essayait d'utiliser chaque valeur unique dans la colonne Vals comme une ligne individuelle produisant beaucoup plus de lignes que la 132 que je voulais, donc je devais ajouter une nouvelle colonne qui était fondamentalement un index de valeur allant de 1: 132 de sorte que le dataframe a 3 colonnes: ID, Vals, ValsNumber

le code dcast ressemble alors à ce qui suit:

df_wide = dcast(df, value.var = "Vals", ValsNumber ~ Sample_ID)