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 - 识别并计算法术(每组中的特殊事件)

r - 密谋:add_trace循环

r - 多个范围的子集

r - 如何使用 roxygen 包从 dplyr 导入管道运算符 %>%

使用 dplyr 对选定列进行行乘法

r - 无法使用 Shinyjs() 禁用 Shiny 的应用程序单选按钮

r - R 中的非线性回归显示错误

r - dplyr 在 mutate() 中使用 select() 助手

通过 dplyr group_by 运行列表并每次进行总结和变异

r - 使用 R 和 dplyr 扩展和离散化时间序列数据