首页 > 解决方案 > 有没有办法在 R 中的数据间隙之间对列中的值进行分组?

问题描述

当数据是连续的时,我想将我的数据分组到不同的块中。试图从这样的虚拟数据中获取组列:

       a     b group
   <dbl> <dbl> <dbl>
 1     1     1     1
 2     2     2     1
 3     3     3     1
 4     4    NA    NA
 5     5    NA    NA
 6     6    NA    NA
 7     7    12     2
 8     8    15     2
 9     9    NA    NA
10    10    25     3

我尝试使用

test %>% mutate(test = complete.cases(.)) %>%
  group_by(group = cumsum(test == TRUE)) %>%
  select(group, everything())

但它没有按预期工作:

   group     a     b test 
   <int> <dbl> <dbl> <lgl>
 1     1     1     1 TRUE 
 2     2     2     2 TRUE 
 3     3     3     3 TRUE 
 4     3     4    NA FALSE
 5     3     5    NA FALSE
 6     3     6    NA FALSE
 7     4     7    12 TRUE 
 8     5     8    15 TRUE 
 9     5     9    NA FALSE
10     6    10    25 TRUE 

有什么建议吗?

标签: r

解决方案


rle在基础 R 中使用-

transform(df, group1 = with(rle(!is.na(b)), rep(cumsum(values), lengths))) |>
  transform(group1 = replace(group1, is.na(b), NA))

#    a  b group group1
#1   1  1     1      1
#2   2  2     1      1
#3   3  3     1      1
#4   4 NA    NA     NA
#5   5 NA    NA     NA
#6   6 NA    NA     NA
#7   7 12     2      2
#8   8 15     2      2
#9   9 NA    NA     NA
#10 10 25     3      3 

推荐阅读