【问题标题】:Can't use survey_mean in sapply不能在 sapply 中使用survey_mean
【发布时间】:2020-06-08 10:27:42
【问题描述】:

我正在使用带有包surveysrvyr 的调查数据,我在将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

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我不知道你为什么在这里需要任何类型的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多