Создать новый столбец в фрейме данных на основе группового события - PullRequest
0 голосов
/ 28 октября 2018

У меня есть фрейм данных с тремя группами (x: 1, 2, 3) и некоторыми событиями (0 и 1 в y):

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

Теперь я хочу сгенерировать новый столбец z на основена событиях в y: если в одной группе есть y = 1, вся группа должна получить 1 для z;еще нет.Как можно сгенерировать 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 голосов
/ 28 октября 2018

С 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...