我有一个包含三个组(x:1、2、3)和一些事件(y中的0和1)的数据框:
x <- c(1, 1, 1, 2, 2, 3, 3, 3, 3)
y <- c(0, 0, 1, 0, 0, 0, 0, 0, 1)
df <- data.frame(x, y)
df
> df
x y
1 1 0
2 1 0
3 1 1
4 2 0
5 2 0
6 3 0
7 3 0
8 3 0
9 3 1
现在,我想基于y中的事件生成一个新的列z:如果一组中的y = 1,则整个组的z应该为1;不,不。如何以这种方式生成z? df应该看起来像:
> df
x y z
1 1 0 1
2 1 0 1
3 1 1 1
4 2 0 NA
5 2 0 NA
6 3 0 1
7 3 0 1
8 3 0 1
9 3 1 1
感谢您的帮助。
答案 0 :(得分:1)
使用dplyr
,您可以按照以下方式进行操作:
library(dplyr)
df %>%
group_by(x) %>%
mutate(z = ifelse(any(y == 1), 1, NA)) %>%
data.frame()
# x y z
# 1 1 0 1
# 2 1 0 1
# 3 1 1 1
# 4 2 0 NA
# 5 2 0 NA
# 6 3 0 1
# 7 3 0 1
# 8 3 0 1
# 9 3 1 1