我是一个相对较新的 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 中的各种函数,例如 dplyr
、tidyr
、aggregate()
,但都没有成功。任何帮助将不胜感激。
非常感谢
亚历克斯
最佳答案
您的问题不可重现。但这里有一个解决方案:
# 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/