Как создать фиктивные переменные на основе нескольких критериев if - PullRequest
0 голосов
/ 10 мая 2019

Мне нужно сгенерировать несколько фиктивных переменных в R и хотел бы, чтобы вы внесли свой вклад в это.

В наборе данных имеется 10 наблюдений на каждого участника, и каждый участник назначается на одну из четырех обработок (1,2,3,4). Выбор состоит в том, чтобы выбрать «1» или «2» в 10 задачах (taskno). Ниже приведены наблюдения.



+----+--------+---------+--------+
| id | taskno | treatno | choice |
+----+--------+---------+--------+
|  1 |      1 |       1 |      1 |
|  1 |      2 |       1 |      2 |
|  1 |      3 |       1 |      2 |
|  1 |      4 |       1 |      2 |
|  1 |      5 |       1 |      1 |
|  1 |      6 |       1 |      1 |
|  1 |      7 |       1 |      1 |
|  1 |      8 |       1 |      1 |
|  1 |      9 |       1 |      1 |
|  1 |     10 |       1 |      1 |
|  2 |      1 |       1 |      1 |
|  2 |      2 |       1 |      1 |
|  2 |      3 |       1 |      2 |
|  2 |      4 |       1 |      2 |
|  2 |      5 |       1 |      1 |
|  . |      . |       . |      . |
|  . |      . |       . |      . |
+----+--------+---------+--------+





Теперь я хотел бы сгенерировать фиктивную переменную, назовем ее dummy_1, так что как только участник выберет вариант 2, а значение равняется 1, тогда dummy_1 должен быть равен 1 для всех оставшихся наблюдений (taskno) для того же участника.

Например, в приведенном выше примере участник 1 выбрал вариант 2 во втором задании. Теперь для остальных наблюдений (Taskno: от 3 до 10) для участника 1, dummy_1 должен быть равен 1 (независимо от выбора участника 1 в TaskNo 3 до 10). То же самое относится к участнику 2 и так далее.

Вывод для "dummy_1" должен быть:




+----+--------+---------+--------+---------+
| id | taskno | treatno | choice | dummy_1 |
+----+--------+---------+--------+---------+
|  1 |      1 |       1 |      1 |       0 |
|  1 |      2 |       1 |      2 |       0 |
|  1 |      3 |       1 |      2 |       1 |
|  1 |      4 |       1 |      2 |       1 |
|  1 |      5 |       1 |      1 |       1 |
|  1 |      6 |       1 |      1 |       1 |
|  1 |      7 |       1 |      1 |       1 |
|  1 |      8 |       1 |      1 |       1 |
|  1 |      9 |       1 |      1 |       1 |
|  1 |     10 |       1 |      1 |       1 |
|  2 |      1 |       1 |      1 |       0 |
|  2 |      2 |       1 |      1 |       0 |
|  2 |      3 |       1 |      2 |       0 |
|  2 |      4 |       1 |      2 |       1 |
|  2 |      5 |       1 |      1 |       1 |
|  . |      . |       . |      . |       . |
|  . |      . |       . |      . |       . |
+----+--------+---------+--------+---------+





Любая помощь в этом отношении будет принята с благодарностью. Спасибо.

1 Ответ

0 голосов
/ 10 мая 2019

Использование dplyr:

library(dplyr)
your_data %>% group_by(id) %>%
  arrange(taskno) %>%
  mutate(dummy_1 = lag(as.integer(cumsum(choice == 2 & treatno == 1) > 0), default = 0))
...