我使用的是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行。指定的数据有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
发布于 2020-06-08 10:33:30
我不知道为什么这里需要任何类型的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.566393https://stackoverflow.com/questions/62259986
复制相似问题