我一直无法在Stack Overflow上找到我的查询解决方案.这篇文章是相似的,但我的数据集略有 - 而且重要的是 - 不同(因为我在我的分组变量中有多个'时间'度量).
随着时间的推移,我对不同地点的生物进行了观察.这些网站进一步聚合到更大的区域,所以我想最终有一个我可以在ddply中调用的函数来汇总地理区域内每个时间段的数据集.但是,我无法获得我需要的功能.
题
如何循环显示时间段并与之前的时间段进行比较,计算交叉点(即两个时间段内发生的"站点"数量)和每个时段中出现的数量之和?
玩具数据集:
time = c(1,1,1,1,2,2,2,3,3,3,3,3)
site = c("A","B","C","D","A","B","C","A","B","C","D","E")
df <- as.data.frame(cbind(time,site))
df$time = as.numeric(df$time)
Run Code Online (Sandbox Code Playgroud)
我的功能
dist2 <- function(df){
for(i in unique(df$time))
{
intersection <- length(which(df[df$time==i,"site"] %in% df[df$time==i- 1,"site"]))
both <- length(unique(df[df$time==i,"site"])) + length(unique(df[df$time==i-1,"site"]))
}
return(as.data.frame(cbind(time,intersection,both)))
}
dist2(df)
Run Code Online (Sandbox Code Playgroud)
我得到了什么:
Run Code Online (Sandbox Code Playgroud)dist2(df) time intersection both 1 1 3 8 2 1 3 8 3 1 3 8 4 1 3 8 5 2 3 8 6 2 3 8 7 2 3 8 …