【发布时间】:2020-03-09 11:51:11
【问题描述】:
我的 df 看起来像:
# A tibble: 14 x 3
user_id flag order
<dbl> <chr> <dbl>
1 1 aaa 1
2 1 aaa 2
3 1 aaa 3
4 1 bbb 4
5 2 bbb 1
6 2 bbb 2
7 3 aaa 1
8 3 aaa 2
9 3 bbb 3
10 4 ccc 1
11 4 aaa 2
12 4 aaa 3
13 4 aaa 4
14 4 aaa 5
test_df <- tibble::tribble(
~user_id, ~flag, ~order,
1, "aaa", 1,
1, "aaa", 2,
1, "aaa", 3,
1, "bbb", 4,
2, "bbb", 1,
2, "bbb", 2,
3, "aaa", 1,
3, "aaa", 2,
3, "bbb", 3,
4, "ccc", 1,
4, "aaa", 2,
4, "aaa", 3,
4, "aaa", 4,
4, "aaa", 5)
- user_id:每个用户的唯一标识符
- 标志(字符串)
- 订购
我想检查每个 user_id 的标志是否在订单中发生了变化。
我想创建一个列has_changedvalued:
-
has_changed如果标志在order之后的某个时间点更改为bbb,则值为 != 从 1 开始。
我做到了:
test_df %>%
group_by(user_id) %>%
mutate(has_changed = ifelse(any(flag == 'bbb' & order != 1), 'yes','no'))
导致:
# A tibble: 14 x 4
# Groups: user_id [4]
user_id flag order has_changed
<dbl> <chr> <dbl> <chr>
1 1 aaa 1 yes
2 1 aaa 2 yes
3 1 aaa 3 yes
4 1 bbb 4 yes
5 2 bbb 1 yes
6 2 bbb 2 yes
7 3 aaa 1 yes
8 3 aaa 2 yes
9 3 bbb 3 yes
10 4 ccc 1 no
11 4 aaa 2 no
12 4 aaa 3 no
13 4 aaa 4 no
14 4 aaa 5 no
给我一个错误的结果,因为 user_id == 2 没有改变,因为它一直有标志 bbb。
我想要的输出应该是这样的:
# A tibble: 14 x 4
user_id flag order has_changed
<dbl> <chr> <dbl> <chr>
1 1 aaa 1 yes
2 1 aaa 2 yes
3 1 aaa 3 yes
4 1 bbb 4 yes
5 2 bbb 1 no
6 2 bbb 2 no
7 3 aaa 1 yes
8 3 aaa 2 yes
9 3 bbb 3 yes
10 4 ccc 1 no
11 4 aaa 2 no
12 4 aaa 3 no
13 4 aaa 4 no
14 4 aaa 5 no
【问题讨论】:
标签: r dplyr group-by tidyverse