Как вы дублируете строки n раз по группам и изменяете одно конкретное значение столбца в R? - PullRequest
0 голосов
/ 14 апреля 2019

Я пытаюсь создать повторяющиеся строки по группам.Количество повторяющихся строк, которые я хочу создать, зависит от группы, и я хочу зафиксировать значение одного столбца. Attended = 0.

Минимальный рабочий пример набора данных DF, с которым я работаю:

ID  Demo  Attended  t
1   3     1         1
1   3     1         3
1   3     0         4
1   3     1         5
2   5     1         2
2   5     1         4
3   7     0         1

В приведенном выше примере предположим, что я хочу, чтобы у каждого человека (ID) было по 5 строк, а демо одинаково во всех строках для каждого человека.Таким образом, я должен создать 1 строку для ID = 1, 3 для ID = 2 и 4 для ID = 4 (я хотел бы рассчитать их динамически для каждой подгруппы).Для новых строк, которые я генерирую, я хочу, чтобы Attended = 0 и t принимали значение отсутствующего индекса, поэтому окончательный результат будет таким:

ID  Demo  Attended  t
1   3     1         1
1   3     1         3
1   3     0         4
1   3     1         5
1   3     0         2
2   5     1         2
2   5     1         4
2   5     0         1
2   5     0         3
2   5     0         5
3   7     0         1
3   7     0         2
3   7     0         3
3   7     0         4
3   7     0         5

Мне удалось создать дублирующиеся строки по группам,но я не смог выяснить, как создать различное количество дубликатов по участнику и правильно заполнить индексный столбец т.

Вот что я работаю:

DF %>%
  group_by(ID) %>%
  rbind(., mutate(., t = row_number()))

Iпытался создать правильное количество дубликатов, используя slice(), и пытался получить значение t, чтобы оно было именно тем, что я хочу, но безрезультатно.

Буду признателен за любую помощь!

1 Ответ

1 голос
/ 14 апреля 2019

Одна tidyverse возможность может быть:

df %>%
 complete(t, nesting(ID), fill = list(Attended = 0)) %>%
 arrange(ID)

       t    ID  Demo Attended
   <int> <int> <int>    <dbl>
 1     1     1     3        1
 2     2     1     3        0
 3     3     1     3        1
 4     4     1     3        0
 5     5     1     3        1
 6     1     2     5        0
 7     2     2     5        1
 8     3     2     5        0
 9     4     2     5        1
10     5     2     5        0
11     1     3     7        0
12     2     3     7        0
13     3     3     7        0
14     4     3     7        0
15     5     3     7        0
...