【问题标题】:How to generate dummy variables based on multiple if criteria如何根据多个 if 条件生成虚拟变量
【发布时间】:2019-09-27 22:36:24
【问题描述】:

我需要在 R 中生成一些虚拟变量,并希望您对此提供意见。

在数据集中,每个参与者有 10 个观察值,每个参与者被分配到四种治疗方法之一(1、2、3、4)。选择是在 10 个任务(taskno)中选择“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 (taskno)对于同一参与者。

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





在这方面的任何帮助将不胜感激。谢谢。

【问题讨论】:

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


    【解决方案1】:

    使用dplyr

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

    【讨论】:

    • 感谢您。那么“treatno”变量呢?我如何才能将其包含在您的代码中?
    • Juste 添加了& treatno == 1,应该这样做。
    • 再次感谢。我试过这个,但它没有生成任何“dummy_1”变量。我知道 mutate 命令以虚拟方式存储变量,但是,我尝试保存修改后的 excel 文件,但找不到 dummy_1。另外,我运行模型并得到错误“找不到对象'dummy_1'”
    • your_data <- your_data %>% ...保存到对象中
    • 它也没有用。也许,我可能做错了什么。
    猜你喜欢
    • 1970-01-01
    • 2023-02-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    相关资源
    最近更新 更多