在 dplyr summarise(across()) 中使用自定义函数
Use a custom function in dplyr summarise(across())
这按预期工作:
library(dplyr)
df <- data.frame(minutes = c(89,90,91),
var1 = c(89, 90, 91),
var2 = c(50, 100, 150))
df %>%
summarise(across(c(var1, var2), list(p90 = ~ .x / minutes * 90)))
但是,当我尝试将它变成一个函数时。这不起作用。
p90 <- function(df, ..., minutes = minutes){
p90.fn <- list(p90 = ~ .x / minutes * 90)
df %>%
summarise(across(vars(...), p90.fn))
}
df %>% p90(var1,var2)
这里的所有答案都指向我在某处需要 {{}} 但我迷路了。谢谢!
只需将 vars
更改为 c
p90 <- function(df, ..., minutes = minutes){
p90.fn <- list(p90 = ~ .x / minutes * 90)
df %>%
summarise(across(c(...), p90.fn))
}
-测试
library(dplyr)
df %>%
p90(var1,var2)
var1_p90 var2_p90
1 90 50.5618
2 90 100.0000
3 90 148.3516
这按预期工作:
library(dplyr)
df <- data.frame(minutes = c(89,90,91),
var1 = c(89, 90, 91),
var2 = c(50, 100, 150))
df %>%
summarise(across(c(var1, var2), list(p90 = ~ .x / minutes * 90)))
但是,当我尝试将它变成一个函数时。这不起作用。
p90 <- function(df, ..., minutes = minutes){
p90.fn <- list(p90 = ~ .x / minutes * 90)
df %>%
summarise(across(vars(...), p90.fn))
}
df %>% p90(var1,var2)
这里的所有答案都指向我在某处需要 {{}} 但我迷路了。谢谢!
只需将 vars
更改为 c
p90 <- function(df, ..., minutes = minutes){
p90.fn <- list(p90 = ~ .x / minutes * 90)
df %>%
summarise(across(c(...), p90.fn))
}
-测试
library(dplyr)
df %>%
p90(var1,var2)
var1_p90 var2_p90
1 90 50.5618
2 90 100.0000
3 90 148.3516