首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rollapply + specnumber =长度不同的采样间隔上的物种丰富度?

rollapply + specnumber =长度不同的采样间隔上的物种丰富度?
EN

Stack Overflow用户
提问于 2016-08-25 19:54:14
回答 1查看 67关注 0票数 1

我有一个社区矩阵(样本x动物种类)。多年来,我每周都会对动物进行采样(在这个例子中,是三年)。我想弄清楚采样时间(开始周和持续时间又称为周数)影响物种丰富度。以下是一个示例数据集:

代码语言:javascript
复制
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)
)

我想要的结果是这样的:

代码语言:javascript
复制
Year  StartWeek  Duration(weeks)  SpeciesRichness 
1996    1            1                 2 
1996    1            2                 3  
1996    1            3                 1 
... 
1998    5            1                 1

我曾尝试通过组合rollapply和素食者的specnumber来做这件事,但得到的是一个样本x物种矩阵,而不是物种丰富度的向量。真奇怪。

例如,我认为这将为我提供两周采样窗口的物种丰富度:

代码语言:javascript
复制
test<-rollapply(Data[3:5],width=2,specnumber,align="right")

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-25 21:44:53

我通过将任务分解成两部分来解决这个问题: 1.使用rollapplyr计算物种丰富度,就像在ddplyr mutate_each thingamabob中实现的那样。2.使用素食计算物种丰富度。

我对每个采样持续时间窗口分别执行了此操作。

下面是最基本的版本(我只是通过更改width参数,针对我想要的每个采样持续时间连续执行此操作):

代码语言:javascript
复制
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 = '[.]')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39144609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档