代码之家  ›  专栏  ›  技术社区  ›  aaaaa

基于data.frame中的一个组从行块中删除重复项

  •  0
  • aaaaa  · 技术社区  · 7 年前

    我需要基于 data.frame .

    在下面的示例中,每组 'a' 观测值(>1)只需减少到一个观测值,该观测值必须是较低值的观测值。 time 价值观:

    df_1 = data.frame(time = c(1,2,8,12,19,22,23,30), group = 'a')
    
    df_2 = data.frame(time = c(4,5,6,15,16,18,21,24,25,27), group = 'b')
    
    df = rbind(df_1, df_2)
    
    > df
       time group
    1     1     a
    2     2     a
    3     4     b
    4     5     b
    5     6     b
    6     8     a
    7    12     a
    8    15     b
    9    16     b
    10   18     b
    11   19     a
    12   21     b
    13   22     a
    14   23     a
    15   24     b
    16   25     b
    17   27     b
    18   30     a
    

    这里是我的预期输出:

       time group
    1     1     a
    3     4     b
    4     5     b
    5     6     b
    6     8     a
    8    15     b
    9    16     b
    10   18     b
    11   19     a
    12   21     b
    13   22     a
    15   24     b
    16   25     b
    17   27     b
    18   30     a
    

    有什么建议吗?

    谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Ronak Shah    7 年前

    我们可以分开 group 使用 rleid data.table , if a 然后返回 time ,为了 b Group按原样返回整个组。

    library(tidyverse)
    library(data.table)
    
    df %>%
      group_split(rleid(group), keep = FALSE) %>%
      map_dfr(~ if(.$group[1] == 'a') .[which.min(.$time), ] else .)
    
    
    #    time group
    #   <int> <fct>
    # 1     1 a    
    # 2     4 b    
    # 3     5 b    
    # 4     6 b    
    # 5     8 a    
    # 6    15 b    
    # 7    16 b    
    # 8    18 b    
    # 9    19 a    
    #10    21 b    
    #11    22 a    
    #12    24 b    
    #13    25 b    
    #14    27 b    
    #15    30 a