我有一个包含三组(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
我很感激任何帮助。
有了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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句