将data.frame列名传递给函数

时间:2018-11-20 18:41:44

标签: r tidyverse

我见过类似的文章,提到需要使用引号将列名传递给函数,但是我可以在遇到问题以及如何改进函数时使用帮助。例如,也许我可以添加一个“后缀”参数来自动为新的data.frame分配一个带有原始后缀的名称?我希望能够有一个通用函数,可用于更改列名和位置。谢谢。

library(tidyverse)  

# function definition #
  createhrly_0595quants <- function(df, hourcolumn, 
     value, qtype, metadata_to_add)   {

df <- df  %>% group_by(hourcolumn) %>%
         summarize(`05%`=quantile(value, probs=0.05, type =qtype),
        `95%`=quantile(value, probs=0.95, type = qtype),
         median = median(value), n=n()) %>% 
         mutate(qtype = qtype, metadata_to_add = metadata_to_add)

}

# sample data.frame #
hrly_gmt  <- seq(from=as.POSIXct("2018-11-20 01:00", 
tz="America/Los_Angeles"), to=as.POSIXct("2018-11-20 23:00", 
 tz="America/Los_Angeles"), by="1 hours")  
myvalues1 <- rnorm(23)
myvalues2 <- rnorm(23)
mydf1 <- data.frame(hrly_gmt, myvalues1) %>% mutate(class = "a")
mydf2 <- data.frame(hrly_gmt, myvalues2) %>% mutate(class = "b")
df_x <- rbind(mydf1, mydf2)

# function use #
df_0595quants <- createhrly_0595quants(df_x, "hrly_gmt",
                 "myvalues", 4, "version x.2")

1 个答案:

答案 0 :(得分:2)

当我们传递字符串作为输入时,我们可以使用group_by代替group_by_at,它使用字符串作为列名,summarize列可以转换为符号({{1 }})并进行评估(sym

!!