R 反向行号函数

R 反向行号函数,r,data.table,R,Data.table,我希望在data.table中传递一个行号,但是,我希望根据特定条件conv反向计数,在这种情况下,conv的条件是0,之前的每个事件都是count-1,按id排序 id group event 1 a click 2 a click 3 a conv 4 b click 5 b conv 输出如下所示: id group event num 1 a

我希望在data.table中传递一个行号,但是,我希望根据特定条件conv反向计数,在这种情况下,conv的条件是0,之前的每个事件都是count-1,按id排序

id    group    event
1     a        click
2     a        click
3     a        conv
4     b        click
5     b        conv
输出如下所示:

id    group    event   num
1     a        click   -2
2     a        click   -1
3     a        conv     0
4     b        click   -1
5     b        conv     0
我使用which.max,所以在有两个conv的情况下,正计数在第一个conv之后开始。序号N相当于dplyr中的行号

我使用which.max,所以在有两个conv的情况下,正计数在第一个conv之后开始。序号N相当于dplyr中的行号

dplyr替代方案,假设每个组只有一个conv。我们可以用组中conv所在的索引减去当前行数。当组中存在conv以外的行时,这也会起作用

library(dplyr)
df %>%
  group_by(group) %>%
  mutate(num = row_number() - which(event == "conv"))


#    id group event   num
#  <int> <fct> <fct> <int>
#1     1 a     click    -2
#2     2 a     click    -1
#3     3 a     conv      0
#4     4 b     click    -1
#5     5 b     conv      0
dplyr替代方案,假设每个组只有一个conv。我们可以用组中conv所在的索引减去当前行数。当组中存在conv以外的行时,这也会起作用

library(dplyr)
df %>%
  group_by(group) %>%
  mutate(num = row_number() - which(event == "conv"))


#    id group event   num
#  <int> <fct> <fct> <int>
#1     1 a     click    -2
#2     2 a     click    -1
#3     3 a     conv      0
#4     4 b     click    -1
#5     5 b     conv      0

如果在conv之后有一行呢?在我的情况下,不应该有一行,但是如果有,则正数1,2,3等。如果在conv之后有一行呢?在我的情况下,不应该有一行,但是如果有,则正数1,2,3等。。