2017-10-19 23 views
0

J'ai une base de données à trois colonnes avec des données d'intrigue, d'espèces et d'occurrence. Lorsque j'utilise str() Je reçois la sortie suivante:Remodeler la base de données au format large pour l'analyse GLM

> str(AbundTGLMSOagg) 
'data.frame': 1148 obs. of 3 variables: 
$ plot  : Factor w/ 139 levels "H01","H02","H03",..: 1 1 1 1 1 1 1 1 1 2 ... 
$ species : Factor w/ 62 levels "albleb","albodo",..: 26 42 46 47 48 50 52 53 62 20 ... 
$ occurrence: int 1 1 1 14 1 10 10 1 1 1 ... 

Cependant, je voudrais en faire un dataframe avec 139 obs (= 139 parcelles) de 62 variables (= 62 espèces), de sorte que chaque species est '$ nom de l'espèce' dans la sortie str().

La str() sortie doit ressembler à cet exemple ici:

> str(antTraits$abund) 
'data.frame': 30 obs. of 41 variables: 
$ Amblyopone.australis   : int 0 0 0 4 2 0 0 0 1 0 ... 
$ Aphaenogaster.longiceps  : int 0 0 0 0 0 0 0 0 0 0 ... 
$ Camponotus.cinereus.amperei : int 0 0 0 0 0 1 0 0 0 0 ... 
$ Camponotus.claripes   : int 2 0 0 1 4 5 6 4 1 2 ... 
$ Camponotus.consobrinus  : int 1 4 6 1 7 11 9 11 19 17 ... 
$ Camponotus.nigriceps   : int 6 0 0 0 0 0 1 0 0 0 ............ETC 

Le dataframe ressemble à ceci:

> head(antTraits$abund) 

    Amblyopone.australis Aphaenogaster.longiceps Camponotus.cinereus.amperei Camponotus.claripes Camponotus.consobrinus Camponotus.nigriceps Camponotus.nigroaeneus 
1     0      0       0     2      1     6      0 
2     0      0       0     0      4     0      1 
3     0      0       0     0      6     0      0 
4     4      0       0     1      1     0      0 
5     2      0       0     4      7     0      0 
6     0      0       1     5      11     0      6 

Ceci est mon jeu de données: https://pastebin.com/XhArqd5F

> foo 
    plot albleb albodo antgha apovil artlak briret buclan cansub carsph catspa cropoi dalcul dallan dalnig daloli dilobo dioehr diomal dipint diptub elltom erican 
    1: H01  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA 
    2: H02  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  1  NA  NA 
    3: H03  NA  NA  NA  3  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  3  NA  NA 
    4: H04  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  1  NA  NA 
    5: H05  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  NA  1  NA  NA  NA  NA  NA  NA  1  NA  NA 

Merci beaucoup pour tout conseil.

+0

Qu'est-ce que vous voulez faire est appelé "remodeler au format large". Vous devriez être capable de trouver la solution avec ce terme de recherche. – Roland

Répondre

0

utilisant data.table vous pouvez faire la

library(data.table) 
    dat = setDT(AbundTGLMSOagg) 
str(dat) 
Classes ‘data.table’ and 'data.frame': 8618 obs. of 3 variables: 
$ plot: Factor w/ 139 levels "H01","H02","H03",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ species: Factor w/ 62 levels "albleb","albodo",..: 1 1 1 1 1 1 1 1 1 1 ... 
$ occurrence: int 0 0 0 0 0 0 0 0 0 1 ... 

suivant Juste dcast vos données en grand format:

foo = dcast.data.table(dat, plot ~ species) 
str(foo) 
Classes ‘data.table’ and 'data.frame': 139 obs. of 63 variables: 
$ Var1 : Factor w/ 139 levels "H01","H02","H03",..: 1 2 3 4 5 6 7 8 9 10 ... 
$ albleb: int 0 0 0 0 0 0 0 0 0 1 ... 
$ albodo: int 0 0 0 0 0 0 0 0 0 0 ... 
$ antgha: int 0 0 0 0 0 0 0 0 0 0 ... 
$ apovil: int 0 0 3 0 0 3 1 0 0 0 ... 
$ artlak: int 0 0 0 0 0 0 0 0 0 0 ... 
$ briret: int 0 0 0 0 0 0 0 0 0 1 ... 
+0

Merci. Deux choses. Je reçois NA (pas 0) quand j'exécute ton code pour 'foo'. Et, je voudrais que le dataframe ressemble exactement à la df dans l'exemple de fourmis (s'il vous plaît voir ajouté à la question), pour 'foo' j'obtiens une sortie légèrement différente (s'il vous plaît voir en question aussi). En tant que tel, '$ Var1: Facteur w/139 niveaux "H01", "H02", "H03", ..: 1 2 3 4 5 6 7 8 9 10 ...' ne devrait pas être là. Des suggestions pour tenir compte de ces modifications? – tabtimm

+0

La valeur par défaut de la fonction ci-dessus est de renvoyer les NA lorsqu'ils ne trouvent pas une occurrence de tracé et une espèce spécifique. Vous pouvez le changer en faisant 'foo [is.na (foo)] = 0'. Var1 correspond à la variable plot, il suffit de la renommer ou de la supprimer si vous ne le voulez pas. Sinon, allez à la page d'aide '? Dcast.data.table' –