【发布时间】:2017-11-05 19:29:34
【问题描述】:
数据框:
mydata<-structure(list(ParkName = c("SEP", "CSSP",
"SEP", "ONF", "SEP",
"ONF", "SEP",
"CSSP", "ONF",
"SEP", "CSSP",
"PPRSP", "PPRSP",
"SEP", "ONF",
"PPRSP", "ONF",
"SEP", "SEP",
"ONF"),
Year = c(2001, 2005, 1998,2011, 1991, 1991, 1991, 1991, 1991, 1992, 1992, 1992, 1992, 1992,
1992, 1992, 1992, 1993, 1994, 1994),
LatinName = c("Mola mola", "Clarias batrachus", "Lithobates catesbeianus", "Rana catesbeiana", "Rana catesbeiana",
"Rana yellowis", "Rana catesbeiana", "Solenopsis sp1","Rana catesbeiana", "Rana catesbeiana",
"Pratensis", "Rana catesbeiana", "Rana catesbeiana", "sp2", "Orchidaceae",
"Rana catesbeiana","Formica", "Rana catesbeiana", "Rana catesbeiana", "sp2"),
NumTotal = c(1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,1, 100, 2, 1, 2)), Names = c("ParkName", "Year", "LatinName",
"NumTotal"),
row.names = c(NA, -20L), class = c("tbl_df", "tbl", "data.frame"))
该数据集代表多年以来不同公园中不同物种的丰富程度。请记住,这只是一个示例数据集,真实的数据集相当大。我基本上想要对这些数据做的是获取记录数据的每一年的物种 X 公园矩阵,然后使用“vegan”包计算每个公园每年的多样性指数。
在社区的一些帮助下,我设法创建了一个基于每年的数据框列表。然后我提取了数据框并将其转换为 Species X park 矩阵。然后,我设法获得了该特定年份每个公园的多样性值。以下是我使用的代码:
library(vegan)
dfList <- split(mydata, mydata$Year) #obtain dataframes for every year
x<-data.frame(dfList[1]) #select dataframe from certain year
x2<-xtabs(x$X1991.NumTotal~x$X1991.ParkName+x$X1991.LatinName,
data=x)#convert selected dataframe into species X site matrix
exp(diversity(x2, index = "shannon")) #extract diversity values
我将如何运行一个循环来基本上做我一年所做的事情,并一直做下去,并最终得到每个公园每年的多样性值列表?我在运行循环时遇到的问题是,这是一个非常不平衡的数据集,因此长度最终不会相互匹配。
【问题讨论】: