使用以前的值扩展和填充数据框

Extend and fill up dataframe with previous values

我遇到了以下可能重复但找不到答案的问题

df <-structure(list(year = c(1980, 1980, 1983, 1983, 1986, 1986), 
name = c("aa", "bb", "aa", "bb", "aa", "bb"), value = c(1, 
2, 4, 3, 2, 5)), .Names = c("year", "name", "value"), row.names = c(NA, 
-6L), class = "data.frame")


  year name value
  1980   aa     1
  1980   bb     2
  1983   aa     4
  1983   bb     3
  1986   aa     2
  1986   bb     5

我想用过去几年的值填补中间缺失的年份,得到类似

的东西
  year name value
  1980   aa     1
  1980   bb     2
  1981   aa     1
  1981   bb     2
  1982   aa     1
  1982   bb     2
  1983   aa     4
  1983   bb     3
  1984   aa     4
  1984   bb     3
  1985   aa     4
  1985   bb     3
  1986   aa     2
  1986   bb     5
  ....

我设法扩展了年份和名称列,并为值列设置了 NAs

df %>%
  complete(year = seq(min(year), max(year)),name)

但未能找到用相应元素填充值列的解决方案。 zoo::na.locf() 想到了,但似乎只需要最后一个值来填充 NA?

你说得对 zoo::na.locf() 可以为所欲为。决定性因素是您需要首先按 name 列对数据框进行分组,以便用适当的 name:

填充最后一个值的空白
library(tidyr)
library(dplyr)
df %>%
  complete(year = seq(min(year), max(year)),name) %>%
  group_by(name) %>%
  mutate(value = zoo::na.locf(value))
## # A tibble: 14 x 3
## # Groups:   name [2]
##     year name  value
##    <dbl> <chr> <dbl>
##  1  1980 aa        1
##  2  1980 bb        2
##  3  1981 aa        1
##  4  1981 bb        2
##  5  1982 aa        1
##  6  1982 bb        2
##  7  1983 aa        4
##  8  1983 bb        3
##  9  1984 aa        4
## 10  1984 bb        3
## 11  1985 aa        4
## 12  1985 bb        3
## 13  1986 aa        2
## 14  1986 bb        5