我陷入了以下问题,可能是重复的问题,但找不到答案
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
....
我设法扩展了year和name列,并为value列提供了NAs
df %>%
complete(year = seq(min(year), max(year)),name)
,但未能找到一种解决方案来用相应的元素填充value列。 zoo::na.locf()
浮现在脑海,但似乎只需要用最后一个值来填满NA?
答案 0 :(得分:5)
您是正确的,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