首页 > 解决方案 > 不能在 sapply 中使用survey_mean

问题描述

我正在使用带有包的调查数据,survey并且在应用于所有列时srvyr遇到了一些麻烦。survey_mean()

这是一个例子:

library(survey)
library(srvyr)

data(api)

dstrata <- apistrat %>%
  as_survey_design(strata = stype, weights = pw) %>%
  mutate(api00 = ifelse(api00 == 467, NA, api00),
         api99 = ifelse(api99 == 491, NA, api99))

sapply(dstrata$variables %>% select(api99, api00), function(x){
  x <- enquo(x)
  dstrata %>%
    filter(!is.na(!!x)) %>%
    summarise(stat = srvyr::survey_mean(!!x, na.rm = TRUE)[, 1]) 
})

错误:分配的数据x必须与现有数据兼容。x 现有数据有 198 行。x 分配的数据有 200 行。ℹ 仅回收大小为 1 的向量。运行rlang::last_error()以查看错误发生的位置。

注意:

dstrata %>%
  select(api99, api00) %>%
  summarise_all(.funs = srvyr::survey_mean, na.rm = T)

适用于此示例,但不适用于我的实际数据,因此我想了解为什么上面的功能不起作用。

我正在使用srvyr_0.3.9survey_4.0

标签: rdplyr

解决方案


我不知道你为什么在这里需要任何类型的 NSE,因为sapply只传递了值而不是表达式。

这似乎有效:

library(dplyr)

sapply(dstrata$variables %>% select(api99, api00), function(x){
   dstrata %>%
      summarise(stat = srvyr::survey_mean(x, na.rm = TRUE)) 
})

#        api99    api00   
#stat    630.3107 663.4118
#stat_se 10.14777 9.566393

推荐阅读