尝试在R中使用整洁的点尝试输入任意数量的分组变量和汇总变量时出错

卡尔提克S

我正在尝试使用整洁的点来构建一个函数,该函数可用于根据需求汇总数据。我需要根据需求使用不同的指标对变量进行分组。

样本数据:

> dput(d)
structure(list(Branch = c("MDU", "KPA", "OMR", "TVM", "KPA", 
"MDU", "MDU", "MDB", "MDU", "OMR", "MDU", "AMB", "OMR", "OMR", 
"GDY", "TVM", "KLM", "EKM", "MDU", "TVM", "KPA", "TVM", "GDY", 
"EKM", "TVM", "KLM", "TVM", "TVM", "AMB", "TVM"), InvoiceDate = structure(c(18475, 
18475, 18475, 18475, 18475, 18475, 18475, 18475, 18475, 18475, 
18475, 18475, 18475, 18475, 18475, 18475, 18475, 18475, 18475, 
18475, 18475, 18475, 18475, 18475, 18475, 18475, 18475, 18475, 
18475, 18475), class = "Date"), LabourRev = c(1093, 300, 1, 2637.86, 
255, 624, 634.75, 3645, 570, 5250, 900, 1500, 423, 1614, 999, 
1140, 2914, 1640, 0, 2574, 255, 1046, 1999, 2637, 1355, 1144, 
0, 1355, 1999, 3240.5), PartsRev = c(1111.98, 990, 0, 16555.64, 
178, 2857.5, 31.74, 3265.03, 28.5, 1942.18, 45, 75, 21.15, 441.71, 
49.95, 3919.5, 10652.72, 4877.58, 0, 16616.53, 1108.11, 1000.49, 
99.95, 2889.68, 0, 3127.34, 0, 0, 99.95, 3618.73), TotalAmt = c(2204.98, 
1290, 1, 19193.5, 433, 3481.5, 666.49, 6910.03, 598.5, 7192.18, 
945, 1575, 444.15, 2055.71, 1048.95, 5059.5, 13566.72, 6517.58, 
0, 19190.53, 1363.11, 2046.49, 2098.95, 5526.68, 1355, 4271.34, 
0, 1355, 2098.95, 6859.23)), row.names = c(NA, -30L), class = c("tbl_df", 
"tbl", "data.frame"))
> 

结构体:

> str(d)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame':   30 obs. of  5 variables:
 $ Branch     : chr  "MDU" "KPA" "OMR" "TVM" ...
 $ InvoiceDate: Date, format: "2020-08-01" "2020-08-01" "2020-08-01" "2020-08-01" ...
 $ LabourRev  : num  1093 300 1 2638 255 ...
 $ PartsRev   : num  1112 990 0 16556 178 ...
 $ TotalAmt   : num  2205 1290 1 19194 433 ...

例如,我可以仅按分支机构或发票日期月份或按两者进行分组。

我尝试编写下面的函数,但遇到如下错误:

mult_grouping <- function(df, ..., ...){
   grping_vars <- enquos(..., .named = 1)
   summary_vars <- enquos(..., .named = 1)
    
   smry_sum <- map(summary_vars, function(var){
      expr(sum(!!var, na.rm = 1))
   })
    
   names(smry_sum) <- paste0('sum_',names(smry_sum))
    
   df %>% 
     group_by(!!!grping_vars) %>% 
     summarise(!!!smry_sum, Counts = n())
}

错误:在第1行重复了形式参数'...'

我们是否应该在函数中仅使用一次整洁的点?有人可以让我知道如何更正代码。

罗纳克·沙

如果您可以将列名作为字符串传递,across处理字符串列名,则不需要复杂的非标准评估

library(dplyr)

mult_grouping <- function(df, group_vars, summary_vars) {
  
  df %>%
    mutate(InvoiceDate = lubridate::month(InvoiceDate)) %>%
    group_by(across(all_of(group_vars))) %>%
    summarise(across(all_of(summary_vars), sum), 
              Counts = n())
}
  1. 单组列,单值列
d %>% mult_grouping("Branch", "LabourRev")

# Branch LabourRev Counts
#  <chr>      <dbl>  <int>
#1 AMB        3499       2
#2 EKM        4277       2
#3 GDY        2998       2
#4 KLM        4058       2
#5 KPA         810       3
#6 MDB        3645       1
#7 MDU        3822.      6
#8 OMR        7288       4
#9 TVM       13348.      8
  1. 多组列单值列。
d %>% mult_grouping(c("Branch", "InvoiceDate"), "LabourRev")

# Branch InvoiceDate LabourRev Counts
#  <chr>        <dbl>     <dbl>  <int>
#1 AMB              8     3499       2
#2 EKM              8     4277       2
#3 GDY              8     2998       2
#4 KLM              8     4058       2
#5 KPA              8      810       3
#6 MDB              8     3645       1
#7 MDU              8     3822.      6
#8 OMR              8     7288       4
#9 TVM              8    13348.      8
  1. 多组列,多值列
d %>% mult_grouping(c("Branch", "InvoiceDate"), c("LabourRev", "PartsRev"))

#  Branch InvoiceDate LabourRev PartsRev Counts
#  <chr>        <dbl>     <dbl>    <dbl>  <int>
#1 AMB              8     3499      175.      2
#2 EKM              8     4277     7767.      2
#3 GDY              8     2998      150.      2
#4 KLM              8     4058    13780.      2
#5 KPA              8      810     2276.      3
#6 MDB              8     3645     3265.      1
#7 MDU              8     3822.    4075.      6
#8 OMR              8     7288     2405.      4
#9 TVM              8    13348.   41711.      8

为了有一个灵活的日期列,我们可以将它作为一个单独的参数传递给函数。

mult_grouping <- function(df, group_vars, summary_vars, date_cols = NULL) {
  if(is.null(date_cols)) {
  df %>%
    group_by(across(all_of(group_vars))) %>%
    summarise(across(all_of(summary_vars), sum), 
              Counts = n())
  } else {
    df %>%
      mutate(date_col = lubridate::month(.data[[date_cols]])) %>%
      group_by(across(c(all_of(group_vars), date_col))) %>%
      summarise(across(all_of(summary_vars), sum), 
                Counts = n())
  }
}

并称他们为:

d %>% mult_grouping("Branch", "LabourRev")

d %>% mult_grouping("Branch", c("LabourRev", "PartsRev"))

d %>% mult_grouping("Branch", c("LabourRev", "PartsRev"), "InvoiceDate")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

尝试插入变量时出错

来自分类Dev

R ttest循环使用整洁的分组变量

来自分类Dev

尝试在for循环内访问变量时出错

来自分类Dev

通过[错误:不是数字变量]分组后在R中使用Levene测试时出错

来自分类Dev

尝试在 python 中使用 '\' 和 'os.startfile',当使用 xlrd 从 excel 中获取变量时

来自分类Dev

创建起始范围时尝试创建空间点变量时出错

来自分类Dev

首次尝试在Rcpp中使用R函数时出错

来自分类Dev

R 尝试在 %>% 中使用 as.Date 时出错

来自分类Dev

尝试在Linq中使用包含时出错

来自分类Dev

尝试在C ++中使用结构时出错

来自分类Dev

尝试在C ++中使用结构时出错

来自分类Dev

尝试在 ${ForEachIn} 中使用 File 时出错?

来自分类Dev

尝试在单引号Bash中使用变量

来自分类Dev

调用MSI文件时尝试传递变量时出错

来自分类Dev

尝试使用变量时出现MsgBox错误

来自分类Dev

尝试在模板C ++中返回变量时出错

来自分类Dev

尝试通过node-sass @use sass变量时出错

来自分类Dev

尝试强制转换变量并传递给新活动时出错

来自分类Dev

尝试在模板C ++中返回变量时出错

来自分类Dev

尝试将C#中的变量插入MySQL时出错

来自分类Dev

尝试在类的构造函数中复制变量时出错

来自分类Dev

尝试按索引打印Collection变量时出错

来自分类Dev

尝试将类的实例与变量类型进行比较时出错

来自分类Dev

C++:'char*' vs 'char',尝试分配变量时出错

来自分类Dev

Python-尝试按年份分组并汇总销售数据时出错

来自分类Dev

尝试使用其他变量创建2D列表数组的XML时出错

来自分类Dev

尝试使用带变量的范围函数填充数组时出错

来自分类Dev

使用out返回多个变量,似乎可以正常工作,但是在尝试输出时出错

来自分类Dev

尝试使用带变量的范围函数填充数组时出错

Related 相关文章

  1. 1

    尝试插入变量时出错

  2. 2

    R ttest循环使用整洁的分组变量

  3. 3

    尝试在for循环内访问变量时出错

  4. 4

    通过[错误:不是数字变量]分组后在R中使用Levene测试时出错

  5. 5

    尝试在 python 中使用 '\' 和 'os.startfile',当使用 xlrd 从 excel 中获取变量时

  6. 6

    创建起始范围时尝试创建空间点变量时出错

  7. 7

    首次尝试在Rcpp中使用R函数时出错

  8. 8

    R 尝试在 %>% 中使用 as.Date 时出错

  9. 9

    尝试在Linq中使用包含时出错

  10. 10

    尝试在C ++中使用结构时出错

  11. 11

    尝试在C ++中使用结构时出错

  12. 12

    尝试在 ${ForEachIn} 中使用 File 时出错?

  13. 13

    尝试在单引号Bash中使用变量

  14. 14

    调用MSI文件时尝试传递变量时出错

  15. 15

    尝试使用变量时出现MsgBox错误

  16. 16

    尝试在模板C ++中返回变量时出错

  17. 17

    尝试通过node-sass @use sass变量时出错

  18. 18

    尝试强制转换变量并传递给新活动时出错

  19. 19

    尝试在模板C ++中返回变量时出错

  20. 20

    尝试将C#中的变量插入MySQL时出错

  21. 21

    尝试在类的构造函数中复制变量时出错

  22. 22

    尝试按索引打印Collection变量时出错

  23. 23

    尝试将类的实例与变量类型进行比较时出错

  24. 24

    C++:'char*' vs 'char',尝试分配变量时出错

  25. 25

    Python-尝试按年份分组并汇总销售数据时出错

  26. 26

    尝试使用其他变量创建2D列表数组的XML时出错

  27. 27

    尝试使用带变量的范围函数填充数组时出错

  28. 28

    使用out返回多个变量,似乎可以正常工作,但是在尝试输出时出错

  29. 29

    尝试使用带变量的范围函数填充数组时出错

热门标签

归档