我正试图使用group_by()
创建一个新变量,该变量根据条件(两个条件(指定1或0。如果条件满足一次,我想将1分配给组中的所有行,如果根本不满足,则将0分配给组。下面的代码在满足条件的单行指定1。如何调整它以填充分组变量中的所有行?
library(tidyverse)
set.seed(10)
dat <- data.frame(
group = rep(c("Group1", "Group2"), each = 18),
d_num = rep(c(1:6), times = 2, each = 3),
var1 = sample(1:4, 36, replace = TRUE),
var2 = sample(1:4, 36, replace = TRUE)
)
x <- dat %>%
group_by(group, d_num) %>%
mutate(var3 = ifelse(var1 == 1 | var2 == 1, 1, 0))
在any()
:中包装您的条件
library(tidyverse)
x <- dat %>%
group_by(group, d_num) %>%
mutate(var3 = ifelse(any(var1 == 1 | var2 == 1), 1, 0))
print(x, n = 20)
输出:
# A tibble: 36 × 5
# Groups: group, d_num [12]
group d_num var1 var2 var3
<chr> <int> <int> <int> <dbl>
1 Group1 1 3 2 1
2 Group1 1 1 1 1
3 Group1 1 2 2 1
4 Group1 2 4 1 1
5 Group1 2 4 3 1
6 Group1 2 3 2 1
7 Group1 3 4 2 1
8 Group1 3 2 2 1
9 Group1 3 3 1 1
10 Group1 4 3 4 1
11 Group1 4 3 1 1
12 Group1 4 4 2 1
13 Group1 5 3 4 0
14 Group1 5 3 3 0
15 Group1 5 2 2 0
16 Group1 6 3 3 0
17 Group1 6 2 2 0
18 Group1 6 2 4 0
19 Group2 1 4 3 1
20 Group2 1 1 3 1
# … with 16 more rows