反向行号功能

时间:2018-10-17 15:36:32

标签: r data.table

我想在data.table中传递一个行号,但是,我想根据conv的条件为0且每个事件先验将按ID计数-1。

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

2 个答案:

答案 0 :(得分:3)

我使用了which.max,所以在有两个conv的情况下,正计数从第一个开始。 seq(.N)等同于row_number()中的dplyr

library(data.table)
setDT(df)

df[, num := seq(.N) - which.max(event == 'conv'), group]

#    id group event num
# 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

答案 1 :(得分:2)

一个dplyr替代方案,假设每个组只有一个“转换”。我们可以通过在组中找到“ conv”的索引减去当前的row_number()。当组中的行“ 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