使用dplyr

时间:2017-02-28 00:34:17

标签: 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(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())

如何在不循环我的时间顺序并单独存储每个组的汇总表的情况下执行此操作?谢谢!

1 个答案:

答案 0 :(得分:0)

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

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