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

Posted

技术标签:

【中文标题】错误:`n()` 只能在 dplyr 动词中使用【英文标题】:Error: `n()` must only be used inside dplyr verbs 【发布时间】:2020-12-15 20:20:42 【问题描述】:

运行 R 4.0.2 和 dplyr 1.0.2

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

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)))

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

谢谢!

【问题讨论】:

如果您包含一个简单的reproducible example,其中包含可用于测试和验证可能解决方案的示例输入和所需输出,则更容易为您提供帮助。您能否也分享您的sessionInfo(),以便我们查看加载了哪些包? 嗨,玛蒂娜!好久不见。 嗨,Ben -- 也很高兴见到你 :) 我还发现有时在 dplyr 之上加载 plyr 会使 n() 或 group_by 无法工作并产生该消息。 【参考方案1】:

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

“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))

这匹配table(apistrat$stype)

【讨论】:

谢谢!我认为这个限制与 srvyr 有关。这完美无缺【参考方案2】:

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

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

所以使用 dplyr::summarise()

【讨论】:

【参考方案3】:

可能是因为您加载了一个包,例如“operators”,它从 dplyr 包中屏蔽了“%>%”。

【讨论】:

不是这样,Ben 的回答已经解释了真正的原因以及如何解决它。

以上是关于错误:`n()` 只能在 dplyr 动词中使用的主要内容,如果未能解决你的问题,请参考以下文章

bigrquery:使用 dplyr 动词在 5-95 个分位数内提取平均值、最大值、最小值和 sd 不起作用

dplyr 滞后与列值中的 n

使用传递给 dplyr::filter 的参数创建一个函数 解决 nse 的最佳方法是啥?

R:错误:在 dplyr 中使用 unnest 时长度不兼容

Comma_Split sentence逗号分裂句 难道它的语法不是错的吗。一个句子中只能有一个谓语

dplyr:根据不同条件分组,然后返回top n