【问题标题】:R: Add new column based on condition with multiple columnsR:根据具有多列的条件添加新列
【发布时间】:2019-11-04 15:08:42
【问题描述】:

我制作了一个数据框,其中有一列包含日期,三列包含数值,1 或 0:

Date      Test1  Test2  Test3
18-3-2016   1      0      0
18-3-2016   0      0      1
19-4-2016   1      0      0
12-2-2017   0      0      0
15-2-2017   0      0      0

我想添加一个新列,根据 3 个测试列中的值放置 1 或 0。只有当 all 测试列的值为 0 时,我才希望新列的值为 1。如果 any 测试列的值为 1,那么它应该返回值 0在新列中。新的所需数据框将如下所示:

Date      Test1  Test2  Test3  New
18-3-2016   1      0      0     0
18-3-2016   0      0      1     0
19-4-2016   1      0      0     0
12-2-2017   0      0      0     1
15-2-2017   0      0      0     1

所以我希望新列仅在 all 其他列等于 0 时返回值 1,否则它应该将值设置为 0。

我已经尝试了一些代码,但它分隔了所有列并给出了不想要的输出:

df$New <- ifelse(df[2:4] >0, 1, 0)

Date      Test1  Test2  Test3  New.Test1  New.Test2  New.Test3       
18-3-2016   1      0       0      0            1         1
18-3-2016   0      0       1      1            1         0
19-4-2016   1      0       0      0            1         1
12-2-2017   0      0       0      1            1         1
15-2-2017   0      0       0      1            1         1

感谢任何帮助。

【问题讨论】:

    标签: r dplyr aggregate


    【解决方案1】:

    您可以尝试基于它们的总和的条件吗?因此,如果所有 3 加在一起为 0,则将新列设为 1。就像这样:

    df$New &lt;- ifelse(df$Test1 + df$Test2 + df$Test3 == 0, 1, 0)

    【讨论】:

    • 感谢您的出色解决方案!
    【解决方案2】:

    您的ifelse() 想法是一个好方法,不同之处在于条件:

    df$New <- ifelse(df$Test1 == 0 & df$Test2 == 0 & df$Test3 == 0,
                      1,
                      0)
    

    &amp; 指定必须同时满足所有要求,这意味着每个测试值必须为 0 才能将 1 分配给新列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 2022-01-14
      • 1970-01-01
      • 2022-11-25
      相关资源
      最近更新 更多