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
我有一个包含许多列(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