【发布时间】:2026-01-27 13:50:01
【问题描述】:
我尝试创建一个函数,该函数将根据每个人有多少唯一的 PATIENT_ID 按降序返回 x 最大的 MOLECULES。从某个日期到最后一个日期。
data <- data.frame(PATIENT_ID = c(1,1,2,2), dateM = c(ymd("2020-01-05","2020-01-06","2020-05-06","2019-12-15")), MOLECULES = c("mol1", "mol1", "mol1", "mol2"))
topx <- function(data, datefrom, var , x = 5){
data %>%
subset(dateM >= datefrom) %>%
group_by(var) %>%
summarize(pat = length(unique(PATIENT_ID))) %>%
arrange(-pat) %>%
head(x) %>%
select(1)
}
topx(data = data, datefrom = "2016-04", var = MOLECULES, x = 2)
在这种情况下,想要的结果是:
c("mol1","mol2")
但是,它将 var 作为文本,并且不会解析 MOLECULES 并告诉我。
Error: Must group by variables found in `.data`.
* Column `var` is not found.
【问题讨论】:
-
注意,'dplyr' 中还有
slice_max函数,它的作用非常相似;也就是说,我认为在这里使用它不会有帮助。除此之外,我建议不要将“dplyr”函数与基本的 R 等效函数混合。也就是说,使用filter而不是subset。filter更健壮,在您做错事时提供更好的错误消息,并且还可以通过{{…}}处理插值变量。subset不会 使用它。原则上,headvsslice_head也是如此,但这里的论点不那么强烈。