簡體   English   中英

使用 rollapplyr function 在 R 中使用 mutate (dplyr) 創建多個列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM