簡體   English   中英

將參數傳遞給 dplyr 切片

[英]passing argument to dplyr slice

我想使用 slice 來獲取最大值和 position (獲取日期)在一個大的data.frame上,我想為幾個變量做這件事。 所以,我正在編寫一個自定義 function 來傳遞幾個變量作為參數,但它不起作用。

           mvar <- "WD"
          
           peak_max <- dataf%>%group_by(year=format(date,"%Y"))%>%
                   dplyr::slice(which.max(!!mvar))
          

我使用了總結,但在傳遞參數時它也失敗了:

            peak_max <- dataf%>%group_by(year=format(date,"%Y"))%>%
                    dplyr::summarise(date=date[which.max(!!mvar)], wd=max(!!mvar))

我也嘗試使用 mvar <- enquo(mvar),但它不起作用。 我錯過了什么? 兩者都在直接使用 WD 時工作,而不是.!mvar。

提前致謝!

看起來您使用的是舊方法來使用 dplyr 進行編程 Enquo()!! 不再使用。

在沒有數據的情況下很難確定你想要實現什么,但是,如果你直接傳遞變量(就像你在dplyr管道中所做的那樣,你可以在 function 中包含它{{ var }} 。如果你傳遞一個字符串變量的名稱,您需要使用.data[[var]]

library(tidyverse)

# pass variable directly
my_func_var <- function(df, var){
  df %>% slice_max({{ var }})
}

iris %>% my_func_var(Sepal.Length)
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
#> 1          7.9         3.8          6.4           2 virginica

# pass variable as string
my_func_str <- function(df, var){
  df %>% slice_max(.data[[var]])
}

my_var <- "Sepal.Length"
iris %>% my_func_str(my_var)
#>   Sepal.Length Sepal.Width Petal.Length Petal.Width   Species
#> 1          7.9         3.8          6.4           2 virginica

代表 package (v1.0.0) 於 2021 年 4 月 23 日創建

(我使用slice_max()因為它感覺更自然,但which.max()似乎也有效)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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