r语言 - dplyr::cur_group_id()按外观顺序而不是按字母顺序



对于如下所示的数据,我试图添加一列来记录试用订单。数据中按试验顺序记录反应时间(rts);即被试p1依次对i1i2i3产生反应;被试p2i2i1i3的反应顺序依次为:最后参与者p3按此顺序对i3i1做出反应。

library(tidyverse) # For dplyr, tibble, and purrr
data <- tribble(
~ p,  ~ r,  ~ i,  ~ rt,
"p1", "r1", "i1", 1234,
"p1", "r2", "i1", 1256,
"p1", "r3", "i1", 1256,
"p1", "r4", "i1", 1256,
"p1", "qq", "i1", 1356,
"p1", "r1", "i2", 1356,
"p1", "r2", "i2", 1356,
"p1", "r3", "i2", 1376,
"p1", "qq", "i2", 1374,
"p1", "r1", "i3", 1374,
"p1", "r2", "i3", 1174,
"p1", "r3", "i3", 1174,
"p1", "qq", "i3", 1173,
"p2", "r1", "i2", 1163,
"p2", "r2", "i2", 1163,
"p2", "r3", "i2", 1163,
"p2", "qq", "i2", 1163,
"p2", "r1", "i1", 1263,
"p2", "r2", "i1", 1263,
"p2", "r3", "i1", 1295,
"p2", "r4", "i1", 1495,
"p2", "qq", "i1", 1495,
"p2", "r1", "i3", 1414,
"p2", "r2", "i3", 1414,
"p2", "r3", "i3", 1414,
"p2", "qq", "i3", 1484,
"p3", "r1", "i3", 1484,
"p3", "r2", "i3", 1182,
"p3", "r3", "i3", 1182,
"p3", "qq", "i3", 1282,
"p3", "r1", "i1", 1282,
"p3", "r2", "i1", 1282,
"p3", "r3", "i1", 1232,
"p3", "r4", "i1", 1232,
"p3", "qq", "i1", 1234
)

因此,我想通过在上面的数据中添加一列来表示试验顺序,从而获得一个新数据,如下所示:

| p    |  r   |  i   |  rt  | trial_order |
| "p1" | "r1" | "i1" | 1234 | 1 |
| "p1" | "r2" | "i1" | 1256 | 1 |
| "p1" | "r3" | "i1" | 1256 | 1 |
| "p1" | "r4" | "i1" | 1256 | 1 |
| "p1" | "qq" | "i1" | 1356 | 1 |
| "p1" | "r1" | "i2" | 1356 | 2 |
| "p1" | "r2" | "i2" | 1356 | 2 |
| "p1" | "r3" | "i2" | 1376 | 2 |
| "p1" | "qq" | "i2" | 1374 | 2 |
| "p1" | "r1" | "i3" | 1374 | 3 |
| "p1" | "r2" | "i3" | 1174 | 3 |
| "p1" | "r3" | "i3" | 1174 | 3 |
| "p1" | "qq" | "i3" | 1173 | 3 |
| "p2" | "r1" | "i2" | 1163 | 1 |
| "p2" | "r2" | "i2" | 1163 | 1 |
| "p2" | "r3" | "i2" | 1163 | 1 |
| "p2" | "qq" | "i2" | 1163 | 1 |
| "p2" | "r1" | "i1" | 1263 | 2 |
| "p2" | "r2" | "i1" | 1263 | 2 |
| "p2" | "r3" | "i1" | 1295 | 2 |
| "p2" | "r4" | "i1" | 1495 | 2 |
| "p2" | "qq" | "i1" | 1495 | 2 |
| "p2" | "r1" | "i3" | 1414 | 3 |
| "p2" | "r2" | "i3" | 1414 | 3 |
| "p2" | "r3" | "i3" | 1414 | 3 |
| "p2" | "qq" | "i3" | 1484 | 3 |
| "p3" | "r1" | "i3" | 1484 | 1 |
| "p3" | "r2" | "i3" | 1182 | 1 |
| "p3" | "r3" | "i3" | 1182 | 1 |
| "p3" | "qq" | "i3" | 1282 | 1 |
| "p3" | "r1" | "i1" | 1282 | 2 |
| "p3" | "r2" | "i1" | 1282 | 2 |
| "p3" | "r3" | "i1" | 1232 | 2 |
| "p3" | "r4" | "i1" | 1232 | 2 |
| "p3" | "qq" | "i1" | 1234 | 2 |

我试着在这个和这个之后使用dplyr::cur_group_id(),但我最终遇到了一个问题,dplyr::cur_group_id()不尊重项目呈现给每个参与者的顺序。相反,dplyr::cur_group_id()反映了项目的字母顺序。我应该修改什么?

# A tibble: 35 × 5
# Groups:   i [3]
p     r     i        rt    ID
<chr> <chr> <chr> <dbl> <int>
1 p1    r1    i1     1234     1
2 p1    r2    i1     1256     1
3 p1    r3    i1     1256     1
4 p1    r4    i1     1256     1
5 p1    qq    i1     1356     1
6 p1    r1    i2     1356     2
7 p1    r2    i2     1356     2
8 p1    r3    i2     1376     2
9 p1    qq    i2     1374     2
10 p1    r1    i3     1374     3
11 p1    r2    i3     1174     3
12 p1    r3    i3     1174     3
13 p1    qq    i3     1173     3
14 p2    r1    i2     1163     2 # This should be 1
15 p2    r2    i2     1163     2 # This should be 1
16 p2    r3    i2     1163     2 # This should be 1
17 p2    qq    i2     1163     2 # This should be 1
18 p2    r1    i1     1263     1 # This should be 2
19 p2    r2    i1     1263     1 # This should be 2
20 p2    r3    i1     1295     1 # This should be 2
21 p2    r4    i1     1495     1 # This should be 2
22 p2    qq    i1     1495     1 # This should be 2
23 p2    r1    i3     1414     3 # This should be 3
24 p2    r2    i3     1414     3 # This should be 3
25 p2    r3    i3     1414     3 # This should be 3
26 p2    qq    i3     1484     3 # This should be 3
27 p3    r1    i3     1484     2 # This should be 1
28 p3    r2    i3     1182     2 # This should be 1
29 p3    r3    i3     1182     2 # This should be 1
30 p3    qq    i3     1282     2 # This should be 1
31 p3    r1    i1     1282     1 # This should be 2
32 p3    r2    i1     1282     1 # This should be 2
33 p3    r3    i1     1232     1 # This should be 2
34 p3    r4    i1     1232     1 # This should be 2
35 p3    qq    i1     1234     1 # This should be 2
<标题>

兆瓦h1> div class="one_answers">您可以使用match()+unique():

library(dplyr)
data %>%
group_by(p) %>%
mutate(ID = match(i, unique(i))) %>%
ungroup()
# A tibble: 35 × 5
p     r     i        rt    ID
<chr> <chr> <chr> <dbl> <int>
1 p1    r1    i1     1234     1
2 p1    r2    i1     1256     1
3 p1    r3    i1     1256     1
4 p1    r4    i1     1256     1
5 p1    qq    i1     1356     1
6 p1    r1    i2     1356     2
7 p1    r2    i2     1356     2
8 p1    r3    i2     1376     2
9 p1    qq    i2     1374     2
10 p1    r1    i3     1374     3
11 p1    r2    i3     1174     3
12 p1    r3    i3     1174     3
13 p1    qq    i3     1173     3
14 p2    r1    i2     1163     1
15 p2    r2    i2     1163     1
16 p2    r3    i2     1163     1
17 p2    qq    i2     1163     1
18 p2    r1    i1     1263     2
19 p2    r2    i1     1263     2
20 p2    r3    i1     1295     2
21 p2    r4    i1     1495     2
22 p2    qq    i1     1495     2
23 p2    r1    i3     1414     3
24 p2    r2    i3     1414     3
25 p2    r3    i3     1414     3
26 p2    qq    i3     1484     3
27 p3    r1    i3     1484     1
28 p3    r2    i3     1182     1
29 p3    r3    i3     1182     1
30 p3    qq    i3     1282     1
31 p3    r1    i1     1282     2
32 p3    r2    i1     1282     2
33 p3    r3    i1     1232     2
34 p3    r4    i1     1232     2
35 p3    qq    i1     1234     2

最新更新