【问题标题】:Q: Index in sequence with reset [R/dplyr]问:按顺序排列索引并重置 [R/dplyr]
【发布时间】:2019-11-21 16:00:47
【问题描述】:

刚接触 R 和一般编程;我正在尝试计算每个组中观察到的值 > N 的行数,直到观察到值 >=,此时计数会重置。

data <- tibble(id=1:10, 
  val=c(1,5,6,1,2,1,300,4,1,300), 
  group=c(1,1,1,3,2,1,1,1,1,3))

What my table looks like:
 id                                  val                             group
 1                                     1                                 1
 2                                     5                                 1
 3                                     6                                 1
 4                                     1                                 3
 5                                     2                                 2
 6                                     1                                 1
 7                                   300                                 1
 8                                     4                                 1
 9                                     1                                 1
10                                   300                                 3

例如,我想计算行数,直到我看到值 > 100,然后重置计数:

 id                                  val                             group          count
 1                                     1                                 1              0
 2                                     5                                 1              1
 3                                     6                                 1              2
 4                                     1                                 3              0
 5                                     2                                 2              0
 6                                     1                                 1              3
 7                                   300                                 1              4
 8                                     4                                 1              0
 9                                     1                                 1              1
10                                   300                                 3              1

我曾考虑添加一个额外的列并将其汇总,直到观察到条件,但我认为这不会像我期望的那样起作用。

data_count <- mutate(data, c=1)
data_count <- grouped_by(data_count) %>% mutate(count=ifelse(val>100, cumsum(c), 0)

     id                                  val                             group          count
     1                                     1                                 1              1
     2                                     5                                 1              1
     3                                     6                                 1              1
     4                                     1                                 3              1
     5                                     2                                 2              1
     6                                     1                                 1              1
     7                                   300                                 1              1
     8                                     4                                 1              1
     9                                     1                                 1              1
    10                                   300                                 3              1

谢谢!

【问题讨论】:

标签: r dplyr


【解决方案1】:

在前面的答案的基础上,你可以做

data %>% 
  group_by(group) %>% 
  mutate(idx=lag(cumsum(val >100),1, 0)) %>% 
  group_by(group, idx) %>% 
  mutate(counter=row_number()-1) %>% 
  ungroup() %>% 
  select(-idx)

返回

      id   val group counter
   <int> <dbl> <dbl>   <dbl>
 1     1     1     1       0
 2     2     5     1       1
 3     3     6     1       2
 4     4     1     3       0
 5     5     2     2       0
 6     6     1     1       3
 7     7   300     1       4
 8     8     4     1       0
 9     9     1     1       1
10    10   300     3       1

【讨论】:

    猜你喜欢
    • 2015-07-04
    • 2021-01-07
    • 2016-09-20
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 2020-08-21
    相关资源
    最近更新 更多