根据现有多个列中的值创建新列

时间:2020-11-04 07:30:10

标签: r dplyr mutate

我需要基于前三列创建一个名为“ condition”(最初不存在)的新列。如果值来自cond1,则在我的条件列中应为1,依此类推。有任何建议。

cond_test = read.csv("https://www.dropbox.com/s/du76g4vlfz2uaph/cond_test.csv?dl=1")
cond_test
#>   ï..cond1 cond2 cond3 condition
#> 1        2    NA    NA         1
#> 2        4    NA    NA         1
#> 3       NA     3    NA         2
#> 4       NA     5    NA         2
#> 5       NA     4    NA         2
#> 6       NA    NA     1         3
#> 7       NA    NA     4         3
#> 8       NA    NA     7         3

2 个答案:

答案 0 :(得分:1)

您可以使用max.col获取每行中的第一个非NA值。

max.col(!is.na(cond_test))
#[1] 1 1 2 2 2 3 3 3

如果该行中有多个非NA值,则可以查看ties.method中的?max.col参数以了解如何处理联系。


dplyr中,您可以使用rowwise

library(dplyr)
cond_test %>%
  rowwise() %>%
  mutate(condition = which.max(!is.na(c_across())))

答案 1 :(得分:0)

我尝试了以下代码,并且正在工作。但是任何优雅的解决方案都可以接受。

cond_test$condition = ifelse(!is.na(cond_test$ï..cond1), 1, 
                             ifelse(!is.na(cond_test$cond2), 2, 3))