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