![](/img/trans.png)
[英]R dplyr mutate multiple columns using custom function to create new column
[英]Create multiple columns with mutate (dplyr) in R using rollapplyr function
我正在嘗試使用 rollapplyr function 和mutate()
function 創建多個列。
手動,我可以做到:
df = data.frame(Vazao = seq(1,100))
df2 <- df %>%
mutate(
roll1 = rollapplyr(Vazao, 1, mean, fill = NA, na.rm = T, partial = F),
roll2 = rollapplyr(Vazao, 2, mean, fill = NA, na.rm = T, partial = F),
roll3 = rollapplyr(Vazao, 3, mean, fill = NA, na.rm = T, partial = F),
roll4 = rollapplyr(Vazao, 4, mean, fill = NA, na.rm = T, partial = F),
roll5 = rollapplyr(Vazao, 5, mean, fill = NA, na.rm = T, partial = F),
); df2
但我認為這是創建大量專欄的明智方法
我需要使用 dplyr 因為將來我會使用group_by()
function
感謝幫助!
我們可以使用map
library(dplyr)
library(purrr)
library(zoo)
map_dfc(1:5, ~ df %>%
transmute(roll = rollapply(Vazao, .x, FUN = mean,
fill = NA, na.rm = T, partial = FALSE))) %>%
bind_cols(df, .)
或者只使用base R
df[paste0("roll", 1:5)] <- lapply(1:5, \(x)
rollapplyr(df$Vazao, x, FUN = mean, fill = NA, na.rm = TRUE, partial = FALSE))
-輸出
> head(df)
Vazao roll1 roll2 roll3 roll4 roll5
1 1 1 NA NA NA NA
2 2 2 1.5 NA NA NA
3 3 3 2.5 2 NA NA
4 4 4 3.5 3 2.5 NA
5 5 5 4.5 4 3.5 3
6 6 6 5.5 5 4.5 4
另一種選擇是使用purrr::reduce
我使用一些glue
魔法( "roll{.y}"
)來命名列:
library(dplyr)
library(purrr)
library(zoo)
purrr::reduce(1:5, ~ mutate(
.x,
"roll{.y}" := rollapply(
Vazao, .y, mean,
fill = NA, na.rm = T, partial = F
)
),
.init = df
)
#> Vazao roll1 roll2 roll3 roll4 roll5
#> 1 1 1 1.5 NA NA NA
#> 2 2 2 2.5 2 2.5 NA
#> 3 3 3 3.5 3 3.5 3
#> 4 4 4 4.5 4 4.5 4
#> 5 5 5 5.5 5 5.5 5
#> 6 6 6 6.5 6 6.5 6
#> 7 7 7 7.5 7 7.5 7
#> 8 8 8 8.5 8 8.5 8
#> 9 9 9 9.5 9 9.5 9
#> 10 10 10 10.5 10 10.5 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.