我有一个数据框,其中包含三个“主要”组(x:1、2、3),三个主要组(v:2、3或1)和一些主要组中的事件(0和y中的1):
x <- c(1, 1, 1, 2, 2, 3, 3, 3, 3)
v <- c(2, 3, 3, 2, 2, 1, 1, 2, 2)
y <- c(0, 0, 1, 0, 0, 0, 0, 0, 1)
df <- data.frame(x, v, y)
df
> df
x v y
1 1 2 0
2 1 3 0
3 1 3 1
4 2 2 0
5 2 2 0
6 3 1 0
7 3 1 0
8 3 2 0
9 3 2 1
例如:在第1组(x = 1)中,还有另外两个组(v = 2和v = 3),事件y = 1发生在组x = 1和v = 3中。
现在,我想基于y中的事件生成一个新的z列:如果一个组中有y = 1,则x中v组中的所有情况都应为z取1;不,不。如何以这种方式生成z? df应该看起来像:
> df
x v y z
1 1 2 0 NA
2 1 3 0 1
3 1 3 1 1
4 2 2 0 NA
5 2 2 0 NA
6 3 1 0 1
7 3 1 1 1
8 3 2 0 NA
9 3 2 0 NA
感谢您的帮助。
答案 0 :(得分:1)
尝试一下:
library(dplyr)
df %>%
group_by(x, v) %>%
mutate(
z = ifelse(any(y == 1), 1, NA)
)
答案 1 :(得分:1)
df %>% group_by(x, v) %>% mutate(z = if(any(y == 1)) 1 else NA)
按x
和y
分组后,如果{{中有z
,则用1
填充新列1
。 1}},否则使用y
。