r - 操纵变量以在 R 中生成新数据集

标签 r dplyr tidyr

我是一个相对较新的 R 用户。如果对我的数据集有任何帮助,我将不胜感激。

我有一个包含 2400 万行的数据集。数据集中有 3 个变量:患者姓名、药房名称和该次就诊时从药房取药的数量。

一些患者不止一次出现在数据集中(即他们在不同时间点从不同药房取药)。

数据框如下所示:

df <- data.frame(name = c("Tom", "Rob", "Tom", "Tom",  "Amy"), 
                 pharmacy = c("A", "B", "B", "B", "C"), 
                 meds = c(3, 2, 5, 8, 2))

根据这些数据,我想生成一个新的数据集,每个患者都有一个药房。该药房必须是患者拿到最多药物的药房。

例如:对于汤姆来说,他最常去的药房是药房 B,因为他从那里购买了 13 种药物(5+8 种药物)。我要生成的数据集:

data.frame(name = c("Tom", "Rob",  "Amy"), 
           pharmacy = c("B", "B", "C"), 
           meds = c(13, 2, 2))

有人可以帮我写一段代码来做到这一点吗? 我尝试了 R 中的各种函数,例如 dplyrtidyraggregate(),但都没有成功。任何帮助将不胜感激。

非常感谢

亚历克斯

最佳答案

您的问题不可重现。但这里有一个解决方案:

# create reproducible example of data 
dataset1 <- data.frame( 
name = c("Tom", "Rob", "Tom", "Tom", "Amy"), 
pharmacy = c("pharmacy_A", "pharmacy_B", "pharmacy_B", "pharmacy_B", "pharmacy_C"),  
meds_count = c(3, 2, 5, 8, 2))

library(dplyr) #load dplyr

dataset2 <- dataset1 %>% group_by(name, pharmacy) %>% # group by your grouping variables
                   summarise(meds_count = sum(meds_count)) %>% # sum no. of meds by your grouping variables
                   top_n(1, meds_count) %>% # filter for only the top 1 count
                   ungroup()

结果数据框:

> dataset2
# A tibble: 3 x 3
  name  pharmacy   meds_count
  <fct> <fct>           <dbl>
1 Amy   pharmacy_C       2.00
2 Rob   pharmacy_B       2.00
3 Tom   pharmacy_B      13.0 

关于r - 操纵变量以在 R 中生成新数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50480860/

相关文章:

linux - 安装 R 3.0 的 bigalgebra 包

r - 在 R 中跨多个列表应用函数

r - 将非互斥指标变量与 dplyr 组合

r - 简化 R 中的反向地理编码

r - 组合具有相同值的列号

r - dplyr:将出现次数放入新变量中

r - 当按其他数据框变量分组时,如何生成包含命名向量的列表列?

r - 单步结合 tidyr::spread 和 dplyr::summarise

r - 评论 R pipeline %>% 的最佳实践

r - 创建每行移动一列的矩阵