替换列中的值,除非那里已经有一个“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
我有这样的数据:
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