Один идентификатор для каждого предмета - Tidyverse - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь создать один идентификатор для каждого субъекта в моем наборе данных. По сути, я хотел бы столбец, который, когда он является субъектом A, имеет значение 1, а всякий раз, когда он является субъектом, он равен 2, и т. Д. c.

Данные выглядят следующим образом:

Subject <- as.factor(c(rep("A", 8), rep("B", 4), rep("C", 12)))
variable.A <- rnorm(mean = 300, sd = 50, n = Subject)
dat <- data.frame(Subject, variable.A)
dat 

   Subject variable.A
1        A   345.2206
2        A   308.3600
3        A   355.9006
4        A   286.2234
5        A   216.0149
6        A   204.1322
7        A   333.5757
8        A   225.2777
9        B   351.0208
10       B   184.0209
11       B   297.5687
12       B   370.6719
13       C   385.4616
14       C   257.3872
15       C   313.9441
16       C   311.0300
17       C   275.4909
18       C   349.2425
19       C   251.2615
20       C   358.9317
21       C   360.2139
22       C   341.3104
23       C   344.5236
24       C   257.9959

Я думал, что смогу использовать seq_along(), но это просто подсчитывает наблюдения по каждому предмету:

library(tidyverse)

dat <- dat %>%
        group_by(Subject) %>%
        mutate(index = seq_along(Subject))

dat %>% as.data.frame()

   Subject variable.A index
1        A   345.2206     1
2        A   308.3600     2
3        A   355.9006     3
4        A   286.2234     4
5        A   216.0149     5
6        A   204.1322     6
7        A   333.5757     7
8        A   225.2777     8
9        B   351.0208     1
10       B   184.0209     2
11       B   297.5687     3
12       B   370.6719     4
13       C   385.4616     1
14       C   257.3872     2
15       C   313.9441     3
16       C   311.0300     4
17       C   275.4909     5
18       C   349.2425     6
19       C   251.2615     7
20       C   358.9317     8
21       C   360.2139     9
22       C   341.3104    10
23       C   344.5236    11
24       C   257.9959    12

1 Ответ

0 голосов
/ 16 марта 2020

Я понял это. Я могу заставить это работать, используя group_indices() функцию:

dat %>%
  group_by(Subject) %>%
  mutate(index = group_indices()) %>%
  as.data.frame()

  Subject variable.A index
1        A   391.6006     1
2        A   361.8112     1
3        A   338.0423     1
4        A   249.7080     1
5        A   327.2406     1
6        A   194.2874     1
7        A   285.5561     1
8        A   389.8570     1
9        B   275.3474     2
10       B   297.7240     2
11       B   288.8234     2
12       B   363.8391     2
13       C   240.0881     3
14       C   290.0673     3
15       C   223.9324     3
16       C   358.1635     3
17       C   262.7484     3
18       C   238.8974     3
19       C   357.8859     3
20       C   264.4908     3
21       C   351.9790     3
22       C   312.3115     3
23       C   353.7145     3
24       C   266.8732     3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...