【问题标题】:Is there a way to find all consecutive subsets of a group in R?有没有办法在 R 中找到一个组的所有连续子集?
【发布时间】:2020-11-13 16:09:32
【问题描述】:

我有一个tsibble,其中包含对多个属性的日常观察。我已按属性对这些观察结果进行分组,并希望在分组数据中生成给定大小n 的所有可能的连续子集。 例如,假设我有数据框:

County,  State, fips_code, date,       workplace_trend
Autauga, AL,    1001,      2020-07-07, -30
Autauga, AL,    1001,      2020-07-08, -29
Autauga, AL,    1001,      2020-07-09, -29
Baldwin, AL,    1003,      2020-04-02, -35
Baldwin, AL,    1003,      2020-04-03, -36
Baldwin, AL,    1003,      2020-04-04, -27

我按fips_code 对我的数据进行了分组,并且我想进一步按每组大小n=2 的所有连续子集进行分组。对于 Autauga 县,生成所有可能的大小为n=2 的连续序列将生成以下组:

County,  State, fips_code, date,       workplace_trend
Autauga, AL,    1001,      2020-07-07, -30
Autauga, AL,    1001,      2020-07-08, -29
County,  State, fips_code, date,       workplace_trend
Autauga, AL,    1001,      2020-07-08, -29
Autauga, AL,    1001,      2020-07-09, -29

如何在 R 中做到这一点?

【问题讨论】:

    标签: r dplyr tidyverse


    【解决方案1】:

    你可以试试:

    library(dplyr)
    library(purrr)
    
    n <- 2
    result <- df %>%
               group_split(fips_code) %>%
               map(~combn(1:nrow(.x), n, function(x) .x[x, ], simplify = FALSE))
    

    由于我们有每天的数据来获取连续的行,我们可以这样做:

    df %>%
      arrange(County, date) %>%
      group_split(fips_code) %>%
      map(function(x) {
        map(1:(nrow(x) - n + 1), ~x %>% slice(.x:(.x + n - 1)))
      }) -> result
    

    【讨论】:

    • 这太棒了!有没有办法在保持秩序的同时做同样的事情?目标是只生成包含连续天数的序列。
    • 对不起,我不明白。保持秩序是什么意思?您能否根据您共享的数据显示您正在寻找的示例输出。
    • 我更新了问题以使其更加清晰。日期只能是连续的天数。
    • @GunnarSundberg 我建议您在问题中使用“连续”一词。对于集合 {1,2,3},“有序”意味着 {1,3} 有效但 {3,1} 无效。 连续是您获得 {1,2} 和 {2,3} 而不是 {1,3} 的方式。
    • @GunnarSundberg 检查更新的答案以获得连续天数。
    猜你喜欢
    • 1970-01-01
    • 2020-06-09
    • 2020-12-02
    • 1970-01-01
    • 2010-10-01
    • 2021-12-24
    • 2013-06-18
    • 2020-11-28
    • 1970-01-01
    相关资源
    最近更新 更多