根据组事件

时间:2018-10-28 16:45:36

标签: r dataframe data.table

我有一个包含三个组(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

感谢您的帮助。

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