我有一个类似以下的数据库:
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解决方案,但任何帮助将不胜感激!
谢谢!
答案 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