使用以前的值扩展和填充数据框
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
我遇到了以下可能重复但找不到答案的问题
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