使用dplyr进行迭代过滤并使用dplyr进行总结

问题描述:

如果已经提出了这个问题,我一直在搜索,并且没有找到可以应用于我的问题的答案。使用dplyr进行迭代过滤并使用dplyr进行总结

我想用dplyr(和co。)解决这个问题,因为我以前的方法(for循环)效率太低。我有一个事件时间数据集,位于组中的站点。我想总结一下在序列中移动窗口中发生的事件的数量(和比例)。

# Example data 
set.seed(1) 
sites = rep(letters[1:10],10) 
groups = c('red','blue','green','yellow') 
times = round(runif(length(sites),1,100)) 

timePeriod = seq(1,100) 

# Example dataframe 
df = data.frame(site = sites, 
       group = rep(groups,length(sites)/length(groups)), 
       time = times) 

这是我试图总结每个组中包含时间(事件)在给定移动窗口时间内的站点数量。 目标是穿过矢量timePeriod的每个元素,并总结在timePeriod[i] +/- half-window处发生的每个组中有多少事件。最终将它们存储在例如具有每个组的列的数据框和每个时间步的行中是理想的。

df %>% 
filter(time > timePeriod[i]-25 & time < timePeriod[i]+25) %>% 
group_by(group) %>% 
summarise(count = n()) 

我怎样才能做到这一点没有循环我的时间顺序,并为每个组单独存储汇总表?谢谢!

结合lapplydplyr,您可以执行以下操作,这与您目前的工作接近。

lapply(timePeriod, function(i){ 
    df %>% 
    filter(time > (i - 25) & time < (i + 25)) %>% 
    group_by(group) %>% 
    summarise(count = n()) %>% 
    mutate(step = i) 
}) %>% 
    bind_rows() 
+0

太好了,谢谢@Juan Bosco!我仍然在学习如何实施申请家庭,这是一个很好的例子。 –