创建新变量作为另一个变量的第一个值,并按第三个变量

时间:2019-03-10 02:52:42

标签: r dplyr mutate

我有一个类似以下的数据库:

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的每一行都应填写并满足以下条件:
-按国家/地区分组
-按年份排列
-对于每个国家/地区,请提取第一个{NA}不是{<1 />} -为该国家/地区的所有单元格插入该值

我希望最终的df看起来像这样:

score

我尝试了以下两次尝试,但无济于事。

尝试#1:

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))

尝试#2:

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

有人能破解问题吗?强烈建议使用dplyr解决方案,但任何帮助将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以先通过arrange将数据帧year group_by,然后country 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 并为每个组选择第一个非NA值。

return