【发布时间】:2015-11-29 08:11:05
【问题描述】:
我搜索并找到了许多接近但不能完全回答我的问题的解决方案。
我想要一个将 0/1 标志添加到数据的函数,表示每单位的最后一次观察。数据按单元和已完成的测试类型分组。
我想使用 dplyr 并进行以下尝试,但是第二次 mutate_ 调用是错误的。
getLastObsFlag <- function(data, id="subject", time="studyday", test="test"){
data <- arrange_(data, id, test, time) %>%
mutate_(lastObsFlag = 0) %>%
group_by_(id, test) %>%
mutate_(lastObsFlag = replace(time, n(), 1))
as.data.frame(data)
}
# Restructure pbcseq from the survival package
junk <- gather(pbcseq, test, value, 12:18)
# That just loaded reshape2 and plyr, so unload them
unloadNamespace("reshape2")
unloadNamespace("plyr")
getLastObsFlag(junk, id="id", time="day", test="test")
对n() 的调用会引发错误:Error in dplyr::n() : This function should not be called directly
我已经读过这是一个连接 plyr 和 dplyr 的问题(我希望使用 dplyr::n() 来克服这个问题)。我查了一下,plyr 是loaded via a namespace (and not attached)。我使用 unloadNamespace 将其删除(并 reshape2),但仍然收到相同的错误消息。
如有任何指示,我将不胜感激。我没有加入n(),因此可以使用替代解决方案。
R version 3.2.2 (2015-08-14)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.3 LTS
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8 LC_MONETARY=en_GB.UTF-8
[6] LC_MESSAGES=en_GB.UTF-8 LC_PAPER=en_GB.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] parallel splines stats graphics grDevices utils datasets methods base
other attached packages:
[1] dmhelp_0.5 brglm_0.5-9 profileModel_0.5-9 dplyr_0.4.3 tidyr_0.2.0 gbm_2.1.1 lattice_0.20-33
[8] survival_2.38-3
loaded via a namespace (and not attached):
[1] Rcpp_0.12.0 assertthat_0.1 MASS_7.3-44 grid_3.2.2 R6_2.1.1 DBI_0.3.1 magrittr_1.5 stringi_0.5-5
[9] lazyeval_0.1.10 tools_3.2.2 stringr_1.0.0
【问题讨论】:
-
我刚刚尝试了一些我认为您建议的变体,但得到了相同的错误消息(plyr 仍未附加或加载)。请澄清
-
你可以试试下面发布的解决方案吗?