您可以使用以下split-apply-bind
方法:
do.call(rbind, lapply(split(dataframe, dataframe$state), na_interpolation))
作为一个工作示例,采用以下虚拟数据:
set.seed(3)
dataframe <- data.frame(state = rep(c("A", "B", "C"), each = 5),
value = rnorm(15))
dataframe$value[sample(15, 4)] <- NA
dataframe
#> state value
#> 1 A -0.96193342
#> 2 A NA
#> 3 A 0.25878822
#> 4 A -1.15213189
#> 5 A 0.19578283
#> 6 B 0.03012394
#> 7 B 0.08541773
#> 8 B NA
#> 9 B NA
#> 10 B 1.26736872
#> 11 C -0.74478160
#> 12 C NA
#> 13 C -0.71635849
#> 14 C 0.25265237
#> 15 C 0.15204571
然后我们可以这样做:
library(imputeTS)
do.call(rbind, lapply(split(dataframe, dataframe$state), na_interpolation))
#> state value
#> A.1 A -0.96193342
#> A.2 A -0.35157260
#> A.3 A 0.25878822
#> A.4 A -1.15213189
#> A.5 A 0.19578283
#> B.6 B 0.03012394
#> B.7 B 0.08541773
#> B.8 B 0.47940140
#> B.9 B 0.87338506
#> B.10 B 1.26736872
#> C.11 C -0.74478160
#> C.12 C -0.73057004
#> C.13 C -0.71635849
#> C.14 C 0.25265237
#> C.15 C 0.15204571
由reprex 包(v0.3.0)于 2020 年 12 月 12 日创建