r:通过 dplyr 的 group_by 函数传递列列表

标签 r dplyr

第一篇文章,从 SAS/SQL 到 R 相对较新。我有一个医疗账单代码列表。我的数据采用“长”格式,其中我获取一行数据,其中包括客户标识符、日期和单个 CPT 代码,以及单位数量和总成本.

假设我的数据包含患者标识符 (PTID)、程序标识符 (ProgramID)、服务日期变量 (DateService)、CPT 代码 (ServiceCode) 和收费单位数 (ServiceUnits)。现在让我们忽略成本变量。

对于特定的患者和就诊,我想了解提交给我们的代码的“模式”。例如,如果他们向我们收取某种特定类型的测试费用,他们是否也倾向于向我们收取某种类型的样本采集费用?

因此,我首先使用 dplyr 和 'dcast' 将数据从“长”转换为“宽”:

claims3 <- dcast(claims2, 
   PTID + ProgramID + DateService ~ paste('Count', ServiceCode, sep =''), 
   value.var = 'ServiceUnits', 
   fun.aggregate = sum)

然后,我想获取每个“行模式”在数据集中出现的次数(减去标识符)。如果您熟悉 SAS,我想要类似 PROC FREQ 的输出以及多路表上的 LIST 选项的内容。我找到了几种不同的方法来做到这一点,例如这个:

claims4 <- select(claims3, -PTID, -DateService, -ProgramID)
c <- claims4 %>% group_by(CountXXXXX, CountYYYYY, CountZZZZZ) %>% tally()

但是,我试图找出如何使用更好的编码来防止自己在 group_by 子句中单独列出所有列。在上面的例子中,我给出了 3 个不同的 CPT 代码。实际上,远远超过 50 个。这是我一次通过 group_by 传递列名列表的最佳尝试。它失败了:

claims4 <- select(claims3, -PTID, -DateService, -ProgramID)
varnames <-list(colnames(claims4))
c2 <- claims4 %>% group_by(varnames) %>% tally()

如有任何建议,我们将不胜感激。谢谢!

最佳答案

我无权访问您的数据,但这对我的 mtcars 数据有效。在您的代码中,只需使用 colnames(claims4)varnames 保留为字符向量,而不是列表。这个想法是使用 syms 将字符向量转换为符号向量,然后使用 !!! 取消对该符号向量的引用:

library(tidyverse)
varnames <- c("cyl", "am")
mtcars %>% group_by(!!!syms(varnames)) %>% tally()

关于r:通过 dplyr 的 group_by 函数传递列列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52570853/

相关文章:

r - 我想在同一个 ggplot 中绘制多个值

r - 使用 R 来估计具有底层马尔可夫过程的有限混合模型

r - 使用 dplyr 和 group_by 编写自己的函数 - 如何继续更改列名

r - R 中具有多列的 pivot_longer

r - 如何使用向量作为预测变量运行多元线性回归?

mysql - 使用 MySQL 查询将二分图数据转换为单模式?

r - RMarkdown 中的 LaTeX 封装

R 在 purrr::map() 中调用 dplyr 1.0.0 filter() 和 across()

r - 过滤多个范围的时间序列

r - 按年份过滤等于或小于阈值