使用dplyr使用迭代过滤器进行分组和汇总

使用dplyr使用迭代过滤器进行分组和汇总,r,dplyr,R,Dplyr,如果有人问我这个问题,我已经搜索了一整天,没有找到一个可以解决我问题的答案 我正试图使用dplyr(和co.)解决这个问题,因为我以前的方法(for循环)效率太低。我有一个分组的现场事件时间数据集。我想总结一下在一个序列中移动窗口中发生的事件的数量(和比例) # Example data set.seed(1) sites = rep(letters[1:10],10) groups = c('red','blue','green','yellow') times = round(runif(l

如果有人问我这个问题,我已经搜索了一整天,没有找到一个可以解决我问题的答案

我正试图使用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)
这是我试图总结在给定的移动时间窗口内每个组中包含时间(事件)的站点数量。 目标是遍历向量
时间段
的每个元素,并总结每组在
时间段[i]+/-半窗口
发生的事件数量。最终,将它们存储在数据框中(例如,每个组有一列,每个时间步有一行)是理想的

df %>%
filter(time > timePeriod[i]-25 & time < timePeriod[i]+25) %>%
group_by(group) %>%
summarise(count = n())
df%>%
过滤器(时间>时段[i]-25和时间<时段[i]+25]%>%
分组依据(分组)%>%
总结(计数=n()

我如何才能做到这一点,而不循环使用我的时间序列并单独存储每个组的汇总表?谢谢

结合
lappy
dplyr
,您可以执行以下操作,这与您迄今为止的工作非常接近

lapply(timePeriod, function(i){
  df %>%
    filter(time > (i - 25) & time < ( i + 25 ) )  %>%
    group_by(group) %>%
    summarise(count = n()) %>% 
    mutate(step = i)
}) %>% 
  bind_rows()
lappy(时间段、函数(i){
df%>%
过滤器(时间>(i-25)&时间<(i+25))%>%
分组依据(分组)%>%
汇总(计数=n())%>%
突变(步骤=i)
}) %>% 
绑定_行()

太好了,谢谢你@Juan Bosco!我还在学习如何实现apply系列,这是一个很好的例子。