na.approx 具有多个特定列

na.approx with multiple specific columns

我有一个包含许多列(colA、colB、colC、colD、...)的数据框 (DF)。我想将 na.approx 函数和 group_by 应用于数据框中的几个但不是全部列。我成功地在一列上应用了 na.approx 和 group_by 函数,具有以下内容:

DFxna<-DF %>% group_by(colA) %>% mutate(colB = na.approx(colB, na.rm = FALSE, maxgap=4))

但是,我无法创建适用于多个指定列的代码。我认为 lapply 是合适的,并尝试了几次,但没有成功,使用 lapply.

也许这符合您的需要。正如我在评论中提到的,一种选择是使用 dplyr::across.

使用一些假数据:

library(zoo)
library(dplyr)

DF <- data.frame(
  colA = c(1, 1, 1, 2, 2, 2, 2),
  colB = c(1, NA, 3, 5, NA, NA, 6),
  colC = c(1, NA, 2, 8, NA, 9, 6),
  colD = c(1, NA, 3, 5, NA, NA, 6)
)

DF %>% 
  group_by(colA) %>% 
  mutate(across(c(colB, colC), ~ na.approx(.x, na.rm = FALSE, maxgap=4)))
#> # A tibble: 7 × 4
#> # Groups:   colA [2]
#>    colA  colB  colC  colD
#>   <dbl> <dbl> <dbl> <dbl>
#> 1     1  1      1       1
#> 2     1  2      1.5    NA
#> 3     1  3      2       3
#> 4     2  5      8       5
#> 5     2  5.33   8.5    NA
#> 6     2  5.67   9      NA
#> 7     2  6      6       6