【问题标题】:Cumulative sequence of values that repeat in R?在 R 中重复的值的累积序列?
【发布时间】:2021-11-01 02:57:03
【问题描述】:

我的问题类似于this,但是,它并不能完全解决我的问题。

我正在尝试创建以特定间隔重复的累积数字序列。例如,如果我有一个如下所示的数据框:

dfTest <- data.frame(
  ID = c("P", "L", "R",
         "P", "L", "R",
         "P", "L", "R",
         "P", "L", "R",
         "P", "L", "R",
         "P", "L", "R",
         "P", "L", "R",
         "P", "L", "R", "LL", "LR"), 
  number = c(1, 1, 1,
             2, 2, 2,
             3, 3, 3,
             4, 4, 4,
             5, 5, 5,
             6, 6, 6,
             7, 7, 7,
             8, 8, 8, 8, 8),
  iteration = c(1, 1, 1, 1, 1, 1,
                1, 1, 1, 1, 1, 1,
                2, 2, 2, 2, 2, 2, 
                2, 2, 2, 2, 2, 2, 2, 2)
)
> dfTest
   ID number iteration
1   P      1         1
2   L      1         1
3   R      1         1
4   P      2         1
5   L      2         1
6   R      2         1
7   P      3         1
8   L      3         1
9   R      3         1
10  P      4         1
11  L      4         1
12  R      4         1
13  P      5         2
14  L      5         2
15  R      5         2
16  P      6         2
17  L      6         2
18  R      6         2
19  P      7         2
20  L      7         2
21  R      7         2
22  P      8         2
23  L      8         2
24  R      8         2
25 LL      8         2
26 LR      8         2

我们可以看到dfTest$number 列就是cumsum(dfTest$ID=="P")。但我想做的是创建另一个列,该列基本上包含来自dfTest$number...的值,但每次dfTest$iteration 列发生变化时都会重新启动。例如,我想要的输出是:

> dfTest
   ID number iteration Counter
1   P      1         1       1
2   L      1         1       1
3   R      1         1       1
4   P      2         1       2
5   L      2         1       2
6   R      2         1       2
7   P      3         1       3
8   L      3         1       3
9   R      3         1       3
10  P      4         1       4
11  L      4         1       4
12  R      4         1       4
13  P      5         2       1
14  L      5         2       1
15  R      5         2       1
16  P      6         2       2
17  L      6         2       2
18  R      6         2       2
19  P      7         2       3
20  L      7         2       3
21  R      7         2       3
22  P      8         2       4
23  L      8         2       4
24  R      8         2       4
25 LL      8         2       4
26 LR      8         2       4

在这里,我们可以看到dfTest$Counter 增加了,就像dfTest$number...但是一旦dfTest$iteration 的值发生变化,dfTest$Counter 就会重新开始。

【问题讨论】:

  • 库(dplyr); df %>% group_by(iteration) %>% mutate(Counter = cumsum(ID == "P")`

标签: r


【解决方案1】:
dfTest %>% 
 group_by(ID)%>% 
 mutate(Counter = row_number())
# A tibble: 26 x 4
# Groups:   ID [5]
   ID    number iteration Counter
   <chr>  <dbl>     <dbl>   <int>
 1 P          1         1       1
 2 L          1         1       1
 3 R          1         1       1
 4 P          2         1       2
 5 L          2         1       2
 6 R          2         1       2
 7 P          3         1       3
 8 L          3         1       3
 9 R          3         1       3
10 P          4         1       4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-18
    • 2013-06-19
    • 1970-01-01
    相关资源
    最近更新 更多