Создать новую переменную в качестве ПЕРВОГО значения другой переменной, отсортированной по третьей переменной - PullRequest
0 голосов
/ 10 марта 2019

У меня есть база данных, подобная следующей:

score_df <- tibble(country = c("US", "US", "US", "US", "Mex", "Mex"),
               year = c(2001, 2000, 1997, 2003, 1998, 2006),
               perc = c(5, 6,8, 8, NA, 10),
               score = c(NA, 400, NA, 423, 12, 18))

Я хочу создать новую переменную, year_1_score, которая представляет счет ПЕРВОГО (не NA) года. Другими словами, year_1_score должно быть заполнено для каждой строки и соответствует следующим критериям:
-Группы по стране
-Устраивает по годам
-Для каждой страны жест первый score, который не является NA
-Вставляет это значение для всех ячеек в этой стране

Я бы хотел, чтобы финальный df выглядел так:

score_df <- tibble(country = c("US", "US", "US", "US", "Mex", "Mex"),
               year = c(2001, 2000, 1997, 2003, 1998, 2006),
               perc = c(5, 6,8, 8, NA, 10),
               score = c(NA, 400, NA, 423, 12, 18),
               year_1_score = c(400, 400, 400, 400, 12, 12))

Я попробовал следующие две попытки, но безрезультатно.

Попытка № 1:

score_df <- score_df %>% 
group_by(country) %>% 
arrange(year) %>% 
mutate(yr_1_score = ifelse(year==min(year) & !is.na(score), score, NA)) %>% 
ungroup() 

Попытка № 2:

score_df <- score_df %>% 
group_by(country) %>% 
arrange(year) %>% 
filter(!is.na(score)) %>% 
slice(1) %>% 
mutate(yr_1_score = score) %>% 
ungroup() 

Кто-нибудь способен взломать проблему? Решения, использующие dplyr, очень предпочтительны, но любая помощь будет высоко ценится!

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

1 Ответ

1 голос
/ 10 марта 2019

Сначала мы можем arrange фрейм данных с помощью year, затем group_by country и выбрать первое не-NA значение для каждой группы.

library(dplyr)

score_df %>%
  arrange(year) %>%
  group_by(country) %>%
  mutate(year_1_score = score[which.max(!is.na(score))]) %>%
  arrange(country)


#  country  year  perc score year_1_score
#  <chr>   <dbl> <dbl> <dbl>        <dbl>
#1 Mex      1998    NA    12           12
#2 Mex      2006    10    18           12
#3 US       1997     8    NA          400
#4 US       2000     6   400          400
#5 US       2001     5    NA          400
#6 US       2003     8   423          400
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...