我需要基于前三列创建一个名为“ 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
答案 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))