替换列中的值,除非那里已经有一个“1”

Replace values in a column unless there's already a "1" there

我有这样的数据:

df<-structure(list(a = c(1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 0, 0, 0), b = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
0, 0, 1, 0, 0, 0)), row.names = c(NA, -19L), class = c("tbl_df", 
"tbl", "data.frame"))

我想根据 B 列替换 A 列中的值。如果 B 列中有“1”,我想用 1 替换 A 列中的行。

我知道这可以做到:

df<-df %>%mutate(a=ifelse(str_detect(b,"1"),1,0))

问题是,这会根据这些规则替换 A 列中的所有内容,覆盖已有的内容。如果 A 还没有“1”,我只想替换它。所以我的预期输出是:

我们可能只需要二进制列上的 | 来替换 'a' 中的值,其中 'b' 也是 1

library(dplyr)
df %>%
    mutate(a = +(a|b))

-输出

# A tibble: 19 × 2
       a     b
   <int> <dbl>
 1     1     0
 2     0     0
 3     0     0
 4     0     0
 5     0     0
 6     0     0
 7     0     0
 8     0     0
 9     0     0
10     0     0
11     0     0
12     0     0
13     0     0
14     0     0
15     0     0
16     1     1
17     0     0
18     0     0
19     0     0

或在base R

df$a[df$b == 1] <- 1