Столбец фрейма данных в качестве аргумента функции dplyr R - PullRequest
0 голосов
/ 29 января 2020

Я хотел бы передать имя столбца в качестве аргумента созданной мной функции, которая использует пакет dplyr.

df = data.frame(grade = c(1,1,1,3,3,5,7,8,8,4),
                score = c(10,20,40,43,56,29,59,37,61,88))

tmp.func = function(df.name, variable.name, year.label){

  require("dplyr")

  df = df.name %>%
    group_by(grade) %>%
    summarise(n = n(),
              M = mean(variable.name),
              SD = sd(variable.name),
              P25 = quantile(variable.name, probs = .25),
              P50 = quantile(variable.name, probs = .50),
              P75 = quantile(variable.name, probs = .75)) %>%
    mutate(grade = as.numeric(as.character(variable.name))) %>%
    arrange(grade) %>%
    dplyr::select(grade,
                  n,
                  M, 
                  SD,
                  P25, 
                  P50, 
                  P75)

  colnames(df) = paste(names(df), ".", year.label, sep = "")

  df

}

tmp = tmp.func(df.name = df, variable.name = "score", year.label = ".1718")

Этот код приводит к приведенному ниже сообщению об ошибке. Я должен запускать эту же функцию десятки раз, поэтому мне нужно создать функцию, которая справится с этим. Есть ли лучший способ подойти к проблеме?

Error in (1 - h) * qs[i] : non-numeric argument to binary operator
In addition: There were 12 warnings (use warnings() to see them)

1 Ответ

0 голосов
/ 29 января 2020

Вы можете сделать это с помощью enquo и !!, чтобы снова «расфиксировать» выражение. Для получения дополнительной информации см. этот раздел Другая входная переменная , как предложено @svenhalvorson.

my_summarise2 <- function(df, expr) {
  expr <- enquo(expr)

  summarise(df,
    mean = mean(!! expr),
    sum = sum(!! expr),
    n = n()
  )
}

использование

my_summarise2(df, score)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...