错误:`n()` 只能在 dplyr 动词中使用

Mar*_*ris 6 r dplyr

运行 R 4.0.2 和 dplyr 1.0.2

我正在尝试n = n()在 srvyr 对象的汇总调用中使用:

relduration_by_age_grp <- l %>% 
  filter(ongoing == 0 & ptype == i) %>% 
  select(ego.id, ptype, age.grp, ego.age.grp, duration, ego.wawt) %>%
  mutate(min.age.grp = ifelse(age.grp < ego.age.grp, 
                              age.grp,
                              ego.age.grp)) %>%
  srvyr::as_survey(ids=1, weights=ego.wawt) %>%
  group_by(ptype, min.age.grp) %>%
  summarize(n = n(),
            wtd.median = srvyr::survey_median(duration, na.rm=TRUE),
            wtd.mean = srvyr::survey_mean(duration, na.rm=TRUE), 
            median = srvyr::unweighted(median(duration, na.rm=TRUE)),
            mean = srvyr::unweighted(mean(duration, na.rm=TRUE)))
Run Code Online (Sandbox Code Playgroud)

基于其他问题/答案,我也尝试过使用,dplyr::summarize(n = dplyr::n(),但这会导致相同的错误。问题是无法在 srvyr 对象上使用 dplyr n() 吗?srvyr 中似乎没有可用于汇总调用的类似函数。

谢谢!

Ben*_*ker 5

据我所知,不同的是dplyr(它几乎接受任何返回标量的汇总函数,以及它自己的专用函数,例如n()),srvyr::summarize为您提供了有限的函数选择: from ?srvyr::summarize,

Summarize for 'tbl_svy' 对象接受几个专门的函数。[强调]

即、survey_meansurvey_totalsurvey_ratio和其他几个

这是一个似乎有效的技巧:计算survey_total逆权重的总和 ( )。

library(srvyr)
data(api, package="survey")
aa <- (apistrat 
      %>% as_survey_design(strata=stype, weights=pw) 
      %>% group_by(stype) 
)
aa %>% summarize(n=survey_total(1/pw))
Run Code Online (Sandbox Code Playgroud)

这匹配 table(apistrat$stype)


Ham*_*mao 5

此错误的原因是 R 混淆了它应该使用哪个汇总函数(dplyr 与 plyr)。

幸运的是,我们可以通过在函数前指定名称和 :: 来明确告诉 R 我们要使用的包。

所以用 dplyr::summarise()