【发布时间】:2019-03-10 11:04:59
【问题描述】:
我有一个类似下面的数据库:
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 的 score
- 为该国家/地区的所有单元格插入此值
我希望最终的 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 的解决方案,但我们将不胜感激!
提前致谢!
【问题讨论】: