r - 不能在 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.9
和survey_4.0
解决方案
我不知道你为什么在这里需要任何类型的 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
推荐阅读
- mysql - 如何获取在 mysql 中使用 [DEFAULT CURRENT_TIMESTAMP] 的表?
- android - 如何在折叠工具栏中更改标题颜色
- python - 如何在 Windows 上安装 docker 来配置 selenoid?
- javascript - 如何在反应中的多个按钮上添加幻灯片动画?
- nginx - 我们可以在请求时而不是响应时访问 NGINX 中的请求日志吗
- python-requests - 使用 Content-Type 发布请求:multipart/form-data
- android - 返回 2 个屏幕时,Android 活动返回过渡刹车
- ios - Cookie 存储 HTTPCookieStorage 和 WKHTTPCookieStore 同步问题
- java - 从包含一对整数的列表中删除重复元素的复杂性
- google-cloud-platform - 有没有办法让 Google Composer 没有外部 IP(被 Cloud NAT 覆盖),但我的 Cloud Build 仍然可以访问它?