【问题标题】:Group and summarize with iterative filter using dplyr使用 dplyr 使用迭代过滤器进行分组和汇总
【发布时间】:2017-07-18 19:24:30
【问题描述】:

如果有人问过这个问题,我先道歉,我整天都在搜索,但没有找到可以应用于我的问题的答案。

我正在尝试使用 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())

如何在不循环遍历我的时间序列并单独存储每个组的汇总表的情况下做到这一点?谢谢!

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    结合lapplydplyr,您可以执行以下操作,这与您迄今为止所做的工作接近。

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

    【讨论】:

    • 太好了,谢谢@Juan Bosco!我还在学习如何实现 apply 系列,很好的例子。
    猜你喜欢
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多