Я хотел бы создать функцию, которая принимает имя столбца как строковую переменную, а затем вычисляет некоторую базовую статистику по этому столбцу и возвращает фрейм данных.
Функция работает хорошо, когда имена столбцов жестко закодированы, ноЯ боролся с методологией, чтобы сделать то же самое при предоставлении переменной.
Я использовал пример в https://dplyr.tidyverse.org/reference/summarise.html, но это не работает и генерирует
Ошибка: невозможно преобразовать NULL в квозер
, если я использую: с использованием имен столбцов переменных в dplyr summaze
Я получаю Ошибка в sort.int (x, na.last = na.last, уменьшается = уменьшается, ...): «x» должен быть атомарным
, если я использую R - dplyr 0.4.1: Как суммировать по имени столбца в функции
Я получаю ошибку Ошибка в! Rlang :: sym (column_to_summerise): недопустимый тип аргумента
У меня есть фрейм данных этой структуры и примеры данных.
Date_Received Discipline Specimen_Number Specimen_Details_Booked_By Date_Time_Booked_In Date_Booked_In
1 2019-09-04 C B,19.4015575.P CMSE 2019-09-04 01:03:00 2019-09-04
Date_Time_Authorised Date_Time_Collected Date_Time_Received Set_Code Location Location_Group_Code
1 2019-09-04 01:31:00 2019-09-04 00:30:00 2019-09-04 00:55:00 PRO2 QOPD <NA>
Analytical_Category tat_auth_collected tat_auth_recieved travel_time reception_time hour_booked_in
1 E 1.0166667 0.6000000 0.4166667 0.13333333 1
и я нахожусьlding универсальную функцию:
summariseData <- function(df, column_to_summerise, target, kpi_target)
{
calc_df <- df %>%
group_by(Date_Received) %>%
dplyr::summarise_(med=median(.data[[column_to_summerise]], na.rm = TRUE),
per95=quantile(.data[[column_to_summerise]], probs = kpi_target, na.rm = TRUE),
In_Target = sum(.data[[column_to_summerise]] <= target, na.rm = TRUE),
Out_Target = sum(.data[[column_to_summerise]] > target, na.rm = TRUE),
Total_Data = count(df))
return(calc_df)
}
или используя:
summariseData <- function(df, column_to_summerise, target, kpi_target)
{
calc_df <- df %>%
group_by(Date_Received) %>%
dplyr::summarise_(med=median(get(column_to_summerise), na.rm = TRUE),
per95=quantile(get(column_to_summerise), probs = kpi_target, na.rm = TRUE),
In_Target = sum(get(column_to_summerise) <= target, na.rm = TRUE),
Out_Target = sum(get(column_to_summerise) > target, na.rm = TRUE),
Total_Data = count(df))
return(calc_df)
}
, которую я бы запустил следующим образом:
# In hours
turnaround_time_target <- 4
# in minutes
reception_target <- 15
# in minutes
travel_time_target <- 15
# In percent
kpi_trigger <- 98
#percentile for KPI
percentile_for_kpi <- kpi_trigger / 10
df_collection <- summariseData(original_df, "tat_auth_collected", turnaround_time_target, percentile_for_kpi)