我正在尝试使用 spOccupancy 包在 R 中运行多物种占用模型。我已经使用这个包运行了单一物种占用模型,但现在我想运行多物种占用模型,以了解物种如何相互作用以影响它们在景观中的占用。但是,这需要我将列表的第一个元素 y 转换为 3D 数组,其中第一个维度等于物种数量,第二个维度等于站点数量,第三个维度等于最大数量给定位点的重复次数。目前我有一个 CSV 文件,其中第一列是站点名称,下一列是物种名称,接下来的几列是 0 和 1,具体取决于是否检测到物种。如何将其转换为 3D 数组来运行多物种占用模型?
这是输入的前五行目前的样子:
structure(list(Site = c("Piata", "Piata", "Piata", "Piata", "Piata"
), Species = c("Anas_flavirostris", "Anas_georgica", "Chloephaga_melanoptera",
"Chroicocephalus_serranus", "Fulica_ardesiaca"), Y.1 = c(1L,
0L, 1L, 1L, 1L), Y.2 = c(0L, 1L, 1L, 0L, 1L), Y.3 = c(1L, 0L,
1L, 0L, 1L)), row.names = c(NA, 5L), class = "data.frame")
您应该能够使用以下两步代码将数据框重塑为看起来像数组的对象。假设您的数据框名为
data
:
第1步:重塑为长形:
library(tidyr)
df <- pivot_longer(data,
cols= -c(Site, Species),
names_to="rep",
names_prefix="Y.",
values_to="Y")
> df
# A tibble: 15 × 4
Site Species rep Y
<chr> <chr> <chr> <int>
1 Piata Anas_flavirostris 1 1
2 Piata Anas_flavirostris 2 0
3 Piata Anas_flavirostris 3 1
4 Piata Anas_georgica 1 0
5 Piata Anas_georgica 2 1
6 Piata Anas_georgica 3 0
7 Piata Chloephaga_melanoptera 1 1
8 Piata Chloephaga_melanoptera 2 1
9 Piata Chloephaga_melanoptera 3 1
10 Piata Chroicocephalus_serranus 1 1
11 Piata Chroicocephalus_serranus 2 0
12 Piata Chroicocephalus_serranus 3 0
13 Piata Fulica_ardesiaca 1 1
14 Piata Fulica_ardesiaca 2 1
15 Piata Fulica_ardesiaca 3 1
第2步:转换为3维数组:
Y <- xtabs(Y~Species+Site+rep, data=df)
Y
, , rep = 1
Site
Species Piata
Anas_flavirostris 1
Anas_georgica 0
Chloephaga_melanoptera 1
Chroicocephalus_serranus 1
Fulica_ardesiaca 1
, , rep = 2
Site
Species Piata
Anas_flavirostris 0
Anas_georgica 1
Chloephaga_melanoptera 1
Chroicocephalus_serranus 0
Fulica_ardesiaca 1
, , rep = 3
Site
Species Piata
Anas_flavirostris 1
Anas_georgica 0
Chloephaga_melanoptera 1
Chroicocephalus_serranus 0
Fulica_ardesiaca 1
当使用
spOccupancy包中的函数时,现在的格式适合于
data
参数的第一个组件 (y)。