R: возможно ли абстрагировать список аргументов от переданных по конвейеру функций, таких как select () и sumrize ()? - PullRequest
0 голосов
/ 24 января 2020

Например:

dataset1 <- masterData %>%
  select(
    variable1,
    variable2,
    variable3,
    ...,
    variablen
  ) %>%
  group_by(groupingVariable1) %>%
  summarize(
    metric1 = ...,
    metric2 = ...,
    metric3 = ...,
    ...,
    metricn = ...
  )

Допустим, я также хочу создать dataset2 и dataset3 (et c ...), где разница only между их конструкцией находится переменная, переданная в group_by() (например, для dataset2 с использованием group_by(groupingVariable2) и для dataset3 с использованием group_by(groupingVariable3). В остальном аргументы, переданные в select() и summarize(), будут идентичны из одного набора данных в другой.

Есть ли способ создать объект selectArguments и объект summarizeArguments, чтобы мне не приходилось дублировать изменения аргументов во всех конструкциях набора данных, если что-то изменится?

Какой лучший способ добиться чего-то подобного:

dataset1 <- masterData %>%
  select(
    selectArguments
  ) %>%
  group_by(groupingVariable1) %>%
  summarize(
    summarizeArguments
  )

Ответы [ 2 ]

1 голос
/ 24 января 2020

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

library(dplyr)

summarising_fun <- function(df, groupingVariable) {
   df %>%
     group_by_at(groupingVariable) %>%
     summarize(
     metric1 = ...,
     metric2 = ...,
     metric3 = ...,
     ...,
     metricn = ...
  )
}

Затем вы можете вызвать функцию для различных наборов данных, используя

summarising_fun(dataset1, "groupingVariable1")
summarising_fun(dataset2, "groupingVariable2")
summarising_fun(dataset3, "groupingVariable3")

Если вы хотите передать переменную группировки как переменную без кавычек, попробуйте использовать оператор curly-curly, который будет измените код на

summarising_fun <- function(df, groupingVariable1) {
  df %>%
   group_by({{groupingVariable1}}) %>%
   summarize(
      metric1 = ...,
      metric2 = ...,
      metricn = ...
  )
}

и может называться

summarising_fun(dataset1, groupingVariable1)
summarising_fun(dataset2, groupingVariable2)
summarising_fun(dataset3, groupingVariable3)
0 голосов
/ 24 января 2020

Вы можете использовать .dots = grouping_variables_as_a_list для указания переменных группировки переменных.

например, это может быть ваш код:

grouping_vars_1 <- c('column_1','column_2')
grouping_vars_2 <- c('column_3','column_4')

process_data <- function(df, grouping_vars){
      dataset1 <- df %>%
                  select(
                    selectArguments
                  ) %>%
                  group_by(.dots = grouping_vars) %>%
                   summarize(
                    summarizeArguments
                   )

      return(dataset1)
}

output_1 <- process_data(your_data_frame,grouping_vars_1)
output_1 <- process_data(your_data_frame,grouping_vars_2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...