2017-10-19 71 views
0

我有一個包含圖,物種和出現數據的3列數據框。當我使用STR()我得到以下輸出:將數據幀整形爲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 ... 

不過,我想談談這與62個變量(= 62種)的139個OBS(= 139個地塊)一個數據幀,使每個物種是str()輸出中的'$物種名稱'。

()輸出,應該與這裏本例中的STR:

> 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 

數據框看起來是這樣的:

> 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 

這是我的數據集: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 

謝謝非常多的任何建議。

+0

你想要做的就是所謂的「重塑寬格式」。您應該能夠使用此搜索詞找到解決方案。 – Roland

回答

0

使用data.table你可以做以下

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 ... 

只是dcast您的數據轉換成寬幅:

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

謝謝。兩件事情。當我爲'foo'運行你的代碼時,我得到NA(不是0)。而且,我希望數據框完全類似於螞蟻示例中的df(請參閱添加到問題中),因爲'foo'我會得到一個稍微不同的輸出(請參見問題)。因此,'$ Var1:因子w/139水平「H01」,「H02」,「H03」,..:1 2 3 4 5 6 7 8 9 10 ...「不應該在那裏。任何建議來說明這些修改? – tabtimm

+0

上述函數的默認值是在沒有找到圖和特定物種的情況下返回NA。你可以通過執行'foo [is.na(foo)] = 0'來改變它。 Var1對應於繪圖變量,只需重命名或放下它,如果你不想要它。否則,請轉到幫助頁面「dcast.data.table」 –

相關問題