У меня есть следующий df:
df <- tibble(country = c("US", "US", "US", "US", "US", "US", "US", "US", "US", "Mex", "Mex"),
year = c(1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2000, 2001),
score = c(NA, NA, NA, NA, 426, NA, NA, 430, NA, 450, NA))
Что я хотел бы сделать: создать новую переменную before_after
, которая равна 0 до первого года, когда страна имеет значение не-NA для score
, а затем - 1.
Другими словами, жестко закодировав его, я бы хотел, чтобы он возвратил следующий df:
df <- tibble(country = c("US", "US", "US", "US", "US", "US", "US", "US", "US", "Mex", "Mex"),
year = c(1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2000, 2001),
score = c(NA, NA, NA, NA, 426, NA, NA, 430, NA, 450, NA),
before_after = c(0,0,0,0,1,1,1,1,1,1,1))
Я попробовал следующий код, но безрезультатно:
df %>%
arrange(year) %>%
group_by(country) %>%
mutate(before_after = ifelse(which.max(!is.na(score)),1,0)) %>%
arrange(country, year)
Tidyverse решения будут высоко оценены, но действительно любая помощь будет очень ценна.
Заранее спасибо!