将数据框重塑为宽格式以进行 GLM 分析
Reshape dataframe to wide format for GLM analysis
我有一个包含地块、物种和出现数据的 3 列数据框。当我使用 str() 时,我得到以下输出:
> 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() 输出中都是“$ species name”。
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
非常感谢您的任何建议。
使用 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 ...
只需将您的数据转换为宽格式:
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 ...
我有一个包含地块、物种和出现数据的 3 列数据框。当我使用 str() 时,我得到以下输出:
> 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() 输出中都是“$ species name”。
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
非常感谢您的任何建议。
使用 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 ...
只需将您的数据转换为宽格式:
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 ...