передача имен столбцов data.frame в функцию - PullRequest
0 голосов
/ 20 ноября 2018

Я видел похожие посты, в которых упоминается необходимость использования кавычек для передачи имен столбцов в функции, но я мог бы использовать справку в том, что я не так и как я мог улучшить функцию.Например, может быть, я мог бы добавить аргумент "суффикс", чтобы автоматически назначать новый 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 голосов
/ 20 ноября 2018

Поскольку мы передаем строки в качестве входных данных, вместо использования group_by мы можем использовать group_by_at, который принимает строки для имен столбцов, столбец summarize можно преобразовать в символ (sym) и вычислить (* 1005)*)

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

  value <- rlang::sym(value)


    df  %>% 
      group_by_at(vars(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)
 }



createhrly_0595quants(df_x, "hrly_gmt",
                  "myvalues", 4, "version x.2")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...