Замена сгруппированных данных в R

#r

Вопрос:

Я хочу создать новую колонку на основе условий

Мой фрейм данных выглядит так:

 Id   Year  Code   Y
1    2009   0     0
1    2010   NA    NA
2    2009   0     0
2    2010   NA    NA
3    2009   1     1
3    2010   NA    NA
4    2009   2     1
4    2010   NA    NA
 

Мне нужно заменить значения в моей исходной переменной Y таким образом, чтобы возвращалось 1, когда код первого года для каждого человека равен 0, а строка второго года/кода равна NA. Результат, который я ищу, это:

 Id   Year  Code    Y
1    2009   0      0
1    2010   NA     1
2    2009   0      0
2    2010   NA     1
3    2009   1      1
3    2010   NA     0
4    2009   2      1
4    2010   NA     0
 

Заранее спасибо!

Комментарии:

1. Охватывает ли ваш пример все возможные комбинации? И всегда ли Y для 2009 года не NA?

Ответ №1:

Это заменяет 0 на 1 и 1 на 0, если NA они присутствуют в Y столбце для каждого Id .

 library(dplyr)

df %>%
  arrange(Id, Year) %>%
  group_by(Id) %>%
  mutate(Y = ifelse(is.na(Y), as.integer(!as.logical(na.omit(Y))), Y))

#     Id  Year  Code     Y
#  <int> <int> <int> <int>
#1     1  2009     0     0
#2     1  2010    NA     1
#3     2  2009     0     0
#4     2  2010    NA     1
#5     3  2009     1     1
#6     3  2010    NA     0
#7     4  2009     2     1
#8     4  2010    NA     0
 

Комментарии:

1. Большое тебе спасибо, Ронак !