我遇到了以下可能重复但无法找到答案的问题
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
Run Code Online (Sandbox Code Playgroud)
我希望用过去几年的价值填补之间缺失的年份,以获得类似的东西
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
....
Run Code Online (Sandbox Code Playgroud)
我设法扩展年份和名称列,并为值列具有NA
df %>%
complete(year = seq(min(year), max(year)),name)
Run Code Online (Sandbox Code Playgroud)
但未能找到使用相应元素填充值列的解决方案.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
Run Code Online (Sandbox Code Playgroud)