R:根据具有多个列的条件添加新列

时间:2019-11-04 15:08:42

标签: r dplyr aggregate

我制作了一个数据框,该数据框具有一个带有日期的列和三个带有1或0的数值的列:

-----BEGIN PGP PUBLIC KEY BLOCK-----

Comment: Hello, World!

UBStcXNLrrB3CTV429OmCB35xiYZNCckQZ8LQ+RkcIetcWUTY5n4oYn+3WGGTvv6
ALCiRIKQgCjV9wFawAUAIPn4Otq+amdvmQYbCTgvWxxpZLHNu2Ixc2z0XsUnKRF3
7Ar3BK0Y72430x4XNtgxePKSeM6yChXyJ5NMGLf7zYBs3al+dpa8HxiWZwyaslRF
moZ3GljtkcRYiVTvDdROwItP
=G3b9

-----END PGP PUBLIC KEY BLOCK-----

我想添加一个新列,根据3个测试列中的值放置1或0。仅当所有测试列的值为0时,我才希望新列的值为1。如果 any 测试列的值为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

因此,我希望新列仅在 all 所有其他列等于0的情况下才返回值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

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

您可以根据其总和尝试有条件的交易吗?因此,如果所有3加在一起为0,则使新列为1。就像这样:

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

答案 1 :(得分:1)

您的ifelse()想法是一种不错的方法,但条件不同:

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

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