我有一个名为 dat_new 的数据框,本质上它是诊所就诊数据,hrn 是患者 ID,dov 是就诊日期(每人多次就诊)。然后我有一个名为 event 的数据框,其中包含过时的入院情况(每人多次入院)。
我想要做的是,对于每次诊所就诊,我想将在该诊所就诊之前发生的住院人数相加,很简单。
这适用于 plyr 的 ddply,需要一些时间但效果很好。
temp <- ddply(dat_new, .(hrn,dov), summarise,
dka2 = sum(event$event_code[which(event$hrn==hrn & event$doa <= dov)]==2),
dka3 = sum(event$event_code[which(event$hrn==hrn & event$doa <= dov)]==3),
dka8 = sum(event$event_code[which(event$hrn==hrn & event$doa <= dov)]==8)
)
现在,尝试在 dplyr 中重写,我得到一个错误
Error: binding not found: 'event_code'
我有这样的编码:
temp2 <- group_by(dat_new, hrn, dov)
temp3 <- summarise(temp2,
dka2 = sum(event$event_code[which(event$hrn==hrn & event$doa <= dov)]==2))
显然 event_code 不在 temp2 数据框中。在“汇总”时,是否 dplyr 不能与“其他”数据帧一起使用?如果有更好的方法来进行“查找”/求和,我正在做我所有的耳朵。
我确实尝试了几次,尝试以不同的顺序在 vanilla R 上加载包,以尝试消除任何命名空间问题。
谢谢
编辑 - 可重现的例子
这是一个快速而肮脏的例子,只是为了说明这个问题。如果我们创建一个“查找”data.frame,每辆车有 2 个,mpg 约为 500,然后我们可以尝试遍历原始 data.frame,在新的 data.frame 中查找并将两个 mpg 相加. plyr 给出了预期的 1000 左右的数字。 dplyr 错误。
# add the model names as a column so they're easier to get at
mtcars$models <- row.names(mtcars)
# create a 'lookup' table
xtra <- data.frame(models = rep(row.names(mtcars),2),
newmpg = rnorm(2*nrow(mtcars),500,10)
)
xtra <- xtra[sample(row.names(xtra)), ]
library(plyr)
ddply(mtcars, .(models), summarise,
revisedmpg = sum(xtra$newmpg[models==xtra$models]) )
# great, one row per car, with both mpgs added together
library(dplyr)
temp2 <- group_by(mtcars, models)
temp3 <- summarise(temp2,
revisedmpg = xtra$newmpg[models==xtra$models] )
# error