用
dplyr
,在这种情况下,您可以使用
case_when
. 它按顺序应用条件,条件可以基于其他列。参见示例。
df <- data.frame(one = c(1,0,1,NA,1))
df2 <- data.frame(one = c(0,0,0,NA,0))
df3 <- data.frame(one = c(NA,NA,NA,NA,NA))
library(dplyr, warn.conflicts = FALSE)
df %>%
mutate(two = case_when(
# if any 1 in one then two == 1
any(one == 1) ~ 1L,
# if no 1 in one, but some 0, then two = 0
any(one == 0) ~ 0L,
# in any other cases, two = NA
TRUE ~ NA_integer_
))
#> one two
#> 1 1 1
#> 2 0 1
#> 3 1 1
#> 4 NA 1
#> 5 1 1
df2 %>%
mutate(two = case_when(
any(one == 1) ~ 1L,
any(one == 0) ~ 0L,
TRUE ~ NA_integer_
))
#> one two
#> 1 0 0
#> 2 0 0
#> 3 0 0
#> 4 NA 0
#> 5 0 0
df3 %>%
mutate(two = case_when(
any(one == 1) ~ 1L,
any(one == 0) ~ 0L,
TRUE ~ NA_integer_
))
#> one two
#> 1 NA NA
#> 2 NA NA
#> 3 NA NA
#> 4 NA NA
#> 5 NA NA
创建于2018-07-08
reprex package
(v0.2.0版)。