用于汇总dplyr和R统计信息中数据的变量:引用以字符串形式存储的列名,并使用`.data`代词:

用于汇总dplyr和R统计信息中数据的变量:引用以字符串形式存储的列名,并使用`.data`代词:,r,dplyr,R,Dplyr,我想构造一个函数,将列名作为字符串变量,然后计算该列的一些基本统计信息并返回一个dataframe 当列名被硬编码时,该函数可以正常工作,但我一直在努力寻找一种方法来在提供变量时实现同样的功能 我在中使用了该示例,但这似乎不起作用,并生成 错误:无法将NULL转换为quosure 如果我使用: 我在sort.int(x,na.last=na.last,discreating=discreating,…)中得到错误: “x”必须是原子的 如果我使用 我在中得到错误错误!rlang::sym(列到列

我想构造一个函数,将列名作为字符串变量,然后计算该列的一些基本统计信息并返回一个dataframe

当列名被硬编码时,该函数可以正常工作,但我一直在努力寻找一种方法来在提供变量时实现同样的功能

我在中使用了该示例,但这似乎不起作用,并生成

错误:无法将NULL转换为quosure

如果我使用:

我在sort.int(x,na.last=na.last,discreating=discreating,…)中得到错误: “x”必须是原子的

如果我使用

我在中得到错误错误!rlang::sym(列到列):参数类型无效

我有一个这种结构的数据框架和样本数据

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
日期\u收到专业样本\u编号样本\u详情\u登记日期\u时间\u登记日期\u登记
中国证券交易所2019-09-04 01:03:00 2019-09-04
日期\u时间\u授权日期\u时间\u收集日期\u时间\u接收设置\u代码位置\u集团\u代码
2019-09-04 01:31:00 2019-09-04 00:30:00 2019-09-04 00:55:00项目2 QOPD
分析类tat_认证收集tat_认证接收旅行时间接收时间预订时间
1 E 1.0166667 0.6000000 0.4166667 0.1333333 1
我正在构建一个通用函数:

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)
}
a%
dplyr::汇总(med=中值(.data[[列到汇总]),na.rm=真),
per95=分位数(.data[[column_to_summarise]],probs=kpi_target,na.rm=TRUE),
在_Target=sum(.data[[column _to _summarise]]Target中,na.rm=TRUE),
总数据=计数(df))
返回(计算单位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)
}
a%
dplyr::summary_uMed=中位数(get(column_to_summarise),na.rm=TRUE),
per95=分位数(get(列到汇总),probs=kpi目标,na.rm=真),
In_Target=sum(get(column_to_summerise)Target,na.rm=TRUE),
总数据=计数(df))
返回(计算单位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)  
#小时

周转时间目标使用Luis评论中的大纲。翻译成我的职能:

summariseData <- function(df, column_to_summerise, target, kpi_target)
{
  column_to_summerise <- enquo(column_to_summerise)

  calc_df <- df %>% 
    group_by(Date_Received) %>% 
    dplyr:: summarise(med=median(!!column_to_summerise, na.rm = TRUE), 
                      per95=quantile(!!column_to_summerise, probs = kpi_target, na.rm = TRUE), 
                      In_Target = sum(!!column_to_summerise <= target, na.rm = TRUE), 
                      Out_Target = sum(!!column_to_summerise > target, na.rm = TRUE), 
                      Total_Data = n()) 
  return(calc_df)
}
dplyr库ds