如何基于多个if条件生成伪变量

时间:2019-05-10 03:52:16

标签: r loops dataframe dummy-variable panel-data

我需要在R中生成一些虚拟变量,并希望您对此进行输入。

在数据集中,每个参与者有10个观察值,每个参与者被分配到四种处理方式(1、2、3、4)之一。选择是在10个任务中选择“ 1”还是“ 2”(任务编号)。以下是观察结果。



+----+--------+---------+--------+
| 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且treatno为1,则对于所有其余观察值(任务编号),dummy_1应该等于1对于同一位参与者。

例如,在上面的示例中,参与者1在第二个任务中选择了选择2。现在,对于参与者1的其余观察结果(任务编号:3到10),dummy_1应该等于1(与任务编号3到10中参与者1的选择无关)。参与者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 :(得分:0)

使用dplyr

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