【问题标题】:Group_by for consecutive patterns in RGroup_by 用于 R 中的连续模式
【发布时间】:2019-12-05 22:11:39
【问题描述】:

我正在尝试根据连续模式进行分组。这是数据集。

num col1
1   SENSOR_01
2   SENSOR_05
3   SENSOR_05, SENSOR_07
4   SENSOR_05, SENSOR_07
5   SENSOR_07
6   SENSOR_05
7   SENSOR_01, SENSOR_03
8   SENSOR_01
9   SENSOR_03
10  SENSOR_01
11  SENSOR_05

结构(列表(编号 = 1:11,col1 = 结构(c(1L,4L,5L,5L,6L,4L, 2L, 1L, 3L, 1L, 4L), .Label = c("SENSOR_01", "SENSOR_01, SENSOR_03", “SENSOR_03”、“SENSOR_05”、“SENSOR_05、SENSOR_07”、“SENSOR_07”),类 =“因子”)),class=“data.frame”,row.names = c(NA, -11L))

如果该行重复包含 SENSOR_05 和 SENSOR_07,则应将其分组。 SENSOR_01 和 SENSOR_03 设置类似。这是我预期的表格(组字段)。

num col1                   group
1   SENSOR_01               1
2   SENSOR_05               2
3   SENSOR_05, SENSOR_07    2
4   SENSOR_05, SENSOR_07    2
5   SENSOR_07               2
6   SENSOR_05               2
7   SENSOR_01, SENSOR_03    3
8   SENSOR_01               3
9   SENSOR_03               3
10  SENSOR_01               3
11  SENSOR_05               4

这是我的代码,但效果不好。

g1 <- c("SENSOR_05", "SENSOR_07")
g2 <- c("SENSOR_01", "SENSOR_03")

test %>%
  group_by(group = cumsum(col1 %in% (rep(c(g1, g2)))))

【问题讨论】:

    标签: r group-by dplyr


    【解决方案1】:
    library(dplyr)
    df %>% mutate(flag=case_when(grepl(paste(g1,collapse = '|'),col1)~1,
                                 grepl(paste(g2,collapse = '|'),col1)~2,
                                 TRUE~3), 
                  group=data.table::rleid(flag))
    
         num                 col1 flag group
      1    1            SENSOR_01    2     1
      2    2            SENSOR_05    1     2
      3    3 SENSOR_05, SENSOR_07    1     2
      4    4 SENSOR_05, SENSOR_07    1     2
      5    5            SENSOR_07    1     2
      6    6            SENSOR_05    1     2
      7    7 SENSOR_01, SENSOR_03    2     3
      8    8            SENSOR_01    2     3
      9    9            SENSOR_03    2     3
      10  10            SENSOR_01    2     3
      11  11            SENSOR_05    1     4
    

    PS:我使用的是 SENSOR_05 或 SENSOR_07 而不是 SENSOR_05 和 SENSOR_07

    【讨论】:

    • 谢谢。啊,我应该做更多的组(比如g1-g100)。我试图在我的原始代码中使用 cumsum 的原因。有什么方法可以自动使组不指定~1,~2?
    • @Juhyeon 不客气,c(sprintf("grepl(paste(g%i,collapse = '|'),col1)~%i",1:2,1:2), "TRUE~3") -&gt; conds;df %&gt;% mutate(flag=case_when(!!!rlang::parse_exprs(conds)), group=data.table::rleid(flag)) 怎么样,那么 1:2 可以是 1:100。
    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2019-12-18
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多