Функция matrify()
в пакете labdsv
делает именно это для анализа сообщества.
Принимает data.frame в виде трех столбцов (sample.id, taxon, изобилие) и преобразует его в полную матричную форму, а затем экспортирует его как data.frame с соответствующими именами row.name и столбцов.
Другими словами, он преобразует ваши данные из длинного в широкий формат, так что каждый row
представляет образец (в вашем случае «среда обитания»; иногда это будет «график»), каждый column
представляет < em> разновидности, и каждый cell
показывает численность данного вида клетки (column
) в среде обитания данной клетки (row
).
Пример:
dat <- data.frame(Habitat = c('Hab1','Hab1','Hab2','Hab2','Hab2','Hab3','Hab3'),
Species = c('Sp1','Sp2','Sp1','Sp3','Sp4','Sp2','Sp3'),
Abundance = c(1,2,1,3,2,2,1))
print(dat)
Habitat Species Abundance
1 Hab1 Sp1 1
2 Hab1 Sp2 2
3 Hab2 Sp1 1
4 Hab2 Sp3 3
5 Hab2 Sp4 2
6 Hab3 Sp2 2
7 Hab3 Sp3 1
library(labdsv)
matrify(dat)
Sp1 Sp2 Sp3 Sp4
Hab1 1 2 0 0
Hab2 1 0 3 2
Hab3 0 2 1 0
Бонус:
Я переписал matrify
много лет назад, чтобы он мог обрабатывать продольный a> данные сообщества
- В частности, моя функция
matrify2()
создает строки для каждой комбинации сюжет-год (т. Е. Переделанные строки для одного и того же участка) путем дублирования названий строк участка (или среды обитания) и добавления столбца Year
.
Ниже приведен код:
#Create data.frame with PLOT, YEAR, and ABUNDANCE for each SPEC:
#Creates function that can sort the data.frame output by:
#Columns = individual SPECS, #Rows = plot by Year
#Note: Code modified from matrify() function from labdsv package (v. 1.6-1)
matrify2 <- function(data) {
#Data must have columns: plot, SPEC, abundance measure,Year
if (ncol(data) != 4)
stop("data frame must have four column format")
plt <- factor(data[, 1])
spc <- factor(data[, 2])
abu <- data[, 3]
yrs <- factor(data[, 4])
plt.codes <- sort(levels(factor(plt))) ##object with sorted plot numbers
spc.codes <- levels(factor(spc)) ##object with sorted SPEC names
yrs.codes <- sort(levels(factor(yrs))) ##object with sorted sampling Years
taxa <- matrix(0, nrow = length(plt.codes)*length(yrs.codes), ncol = length(spc.codes)) ##Create empty matrix with proper dimensions (unique(plotxYear) by # of SPEC)
plt.list <- rep(plt.codes,length(yrs.codes)) ##Create a list of all the plot numbers (in order of input data) to add as an ID column at end of function
yrs.list <- rep(yrs.codes,each=length(plt.codes)) ##Create a list of all the Year numbers (in order of input data) to add as an ID column at end of function
col <- match(spc, spc.codes) ##object that determines the alphabetical order ranking of each SPEC in the spc.code list
row.plt <- match(plt, plt.codes) ##object that determines the rank order ranking of each plot of the input data in the plt.code list
row.yrs <- match(yrs,yrs.codes) ##object that determines the rank order ranking of each Year of the input data in the yrs.code list
for (i in 1:length(abu)) {
row <- (row.plt[i])+length(plt.codes)*(row.yrs[i]-1) ##Determine row number by assuming each row represents a specific plot & year in an object of rep(plot,each=Year)
if(!is.na(abu[i])) { ##ONly use value if !is.na .. [ignore all is.NA values]
taxa[row, col[i]] <- sum(taxa[row, col[i]], abu[i]) ##Add abundance measure of row i to the proper SPEC column and plot/Year row. Sum across all identical individuals.
}
}
taxa <- data.frame(taxa) ##Convert to data.frame for easier manipulation
taxa <- cbind(plt.list,yrs.list,taxa) ##Add ID columns for plot and Year to each row already representing the abundance of Each SPEC of that given plot/Year.
names(taxa) <- c('Plot','Year',spc.codes)
taxa
}
Пример:
dat.y <- data.frame(Habitat = c('Hab1','Hab1','Hab2','Hab2','Hab2','Hab3','Hab3','Hab1','Hab1','Hab2','Hab2','Hab2','Hab3','Hab3'),
Species = c('Sp1','Sp2','Sp1','Sp3','Sp4','Sp2','Sp3','Sp1','Sp2','Sp1','Sp3','Sp4','Sp2','Sp3'),
Abundance = c(1,2,1,3,2,2,1,1,2,1,3,2,2,1),
Year = c(1,1,1,1,1,1,1,2,2,2,2,2,2,2))
print(dat.y)
Habitat Species Abundance Year
1 Hab1 Sp1 1 1
2 Hab1 Sp2 2 1
3 Hab2 Sp1 1 1
4 Hab2 Sp3 3 1
5 Hab2 Sp4 2 1
6 Hab3 Sp2 2 1
7 Hab3 Sp3 1 1
8 Hab1 Sp1 1 2
9 Hab1 Sp2 2 2
10 Hab2 Sp1 1 2
11 Hab2 Sp3 3 2
12 Hab2 Sp4 2 2
13 Hab3 Sp2 2 2
14 Hab3 Sp3 1 2
matrify2(dat.y)
Plot Year Sp1 Sp2 Sp3 Sp4
1 Hab1 1 1 2 0 0
2 Hab2 1 1 0 3 2
3 Hab3 1 0 2 1 0
4 Hab1 2 1 2 0 0
5 Hab2 2 1 0 3 2
6 Hab3 2 0 2 1 0
Кроме того, к вашему сведению, вы должны узнать labdsv
в соответствии с vegan
документацией < / а>:
Вместе с пакетом labdsv
пакет vegan
предоставляет большинство стандартных инструментов описательного анализа сообщества.
person
theforestecologist
schedule
05.06.2018