R:根据组分配增量ID

时间:2019-04-08 22:43:27

标签: r dplyr

我有以下示例数据框:

> test = data.frame(UserId = sample(1:5, 10, replace = T)) %>% arrange(UserId)
> test
   UserId
1       1
2       1
3       1
4       1
5       1
6       3
7       4
8       4
9       4
10      5

我现在想要为该用户创建另一个名为loginCount的列,类似于在每个组中分配增量ID,如下所示。使用如下所示的mutate在每个组中创建ID,但是如何获取每个组中彼此独立的增量ID?

> test %>% mutate(loginCount = group_indices_(test, .dots = "UserId"))
   UserId loginCount
1       1          1
2       1          1
3       1          1
4       1          1
5       1          1
6       3          2
7       4          3
8       4          3
9       4          3
10      5          4

我想要如下所示的内容:

UserId     loginCount
1          1
1          2
1          3
1          4
1          5
3          1
4          1
4          2
4          3
5          1

2 个答案:

答案 0 :(得分:2)

您可以分组并使用row_number

test %>% 
  arrange(UserId) %>%
  group_by(UserId) %>% 
  mutate(loginCount = row_number()) %>%
  ungroup()

# A tibble: 10 x 2
# Groups:   UserId [4]
   UserId loginCount
    <int>      <int>
 1      1          1
 2      1          2
 3      1          3
 4      1          4
 5      1          5
 6      3          1
 7      4          1
 8      4          2
 9      4          3
10      5          1

答案 1 :(得分:1)

使用基础R tapply()

的一种解决方案
test$loginCount <- unlist(tapply(rep(1, nrow(test)), test$UserId, cumsum))

> test
   UserId loginCount
1       1          1
2       1          2
3       1          3
4       1          4
5       1          5
6       3          1
7       4          1
8       4          2
9       4          3
10      5          1