我有一个社区矩阵(样本x动物种类)。多年来,我每周都会对动物进行采样(在这个例子中,是三年)。我想弄清楚采样时间(开始周和持续时间又称为周数)影响物种丰富度。以下是一个示例数据集:
Data <- data.frame(
Year = rep(c('1996', '1997', '1998'), each = 5),
Week = rep(c('1', '2', '3', '4', '5'), 3),
Species1 =sample(0:5, 15, replace=T),
Species2 =sample(0:5, 15, replace=T),
Species3 =sample(0:5, 15, replace=T)
)我想要的结果是这样的:
Year StartWeek Duration(weeks) SpeciesRichness
1996 1 1 2
1996 1 2 3
1996 1 3 1
...
1998 5 1 1我曾尝试通过组合rollapply和素食者的specnumber来做这件事,但得到的是一个样本x物种矩阵,而不是物种丰富度的向量。真奇怪。
例如,我认为这将为我提供两周采样窗口的物种丰富度:
test<-rollapply(Data[3:5],width=2,specnumber,align="right")谢谢你的帮助!
发布于 2016-08-25 21:44:53
我通过将任务分解成两部分来解决这个问题: 1.使用rollapplyr计算物种丰富度,就像在ddplyr mutate_each thingamabob中实现的那样。2.使用素食计算物种丰富度。
我对每个采样持续时间窗口分别执行了此操作。
下面是最基本的版本(我只是通过更改width参数,针对我想要的每个采样持续时间连续执行此操作):
weeksum2 <- function(x) {rollapply(x, width = 2, align = 'left', sum, fill=NA)}
sum2weeks<-Data%>%
arrange(Year, Week)%>%
group_by(Year)%>%
mutate_each(funs(weeksum2), -Year, -Week)
weeklyspecnumber2<-specnumber(sum2weeks[,3:ncol(sum2weeks)],
groups = interaction(sum2weeks$Week, sum2weeks$Year))
weeklyspecnumber2<-unlist(weeklyspecnumber2)
weeklyspecnumber2<-as.data.frame(weeklyspecnumber2)
weeklyspecnumber2$WeekYear<-as.factor(rownames(weeklyspecnumber2))
weeklyspecnumber2<-tidyr::separate(weeklyspecnumber2, WeekYear, into = c('Week', 'Year'), sep = '[.]')https://stackoverflow.com/questions/39144609
复制相似问题