[R] Help with function and survey data
Edjabou Vincent
m@k|@we @end|ng |rom gm@||@com
Mon Oct 31 16:38:29 CET 2022
Dear R-Help
I am working with complex survey data using the survey package.
I would like to create a function for the generate multi crosstable. The
problem is that I am getting error with the following message:
"Error in eval(predvars, data, env) : object 'y' not found"
Here is the example:
library(tidyverse)
library(plyr)
library(survey)
dat <- structure(list(
r3a_1 = structure(c(3L, 2L, 3L, 3L, 3L, 3L, 3L,3L, 3L, 3L, 3L, 2L, 2L,
3L, 3L, 3L, 3L, 3L, 3L, 3L),
.Label = c("Don't Know", "No", "Yes"), class = "factor"),
r3a_2 = structure(c(3L, 3L,3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L, 3L, 3L, 3L, 3L),
.Label = c("Don't Know", "No", "Yes"), class =
"factor"),
r3a_3 = structure(c(3L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 3L, 3L),
.Label = c("Don't Know","No", "Yes"), class =
"factor"),
r3a_4 = structure(c(3L,2L, 2L, 2L, 3L, 2L, 2L, 3L, 3L, 2L, 2L, 3L, 2L,
3L, 2L, 2L,3L, 3L, 3L, 1L),
.Label = c("Don't Know", "No", "Yes"), class =
"factor"),
r3a_5 = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 3L, 2L, 3L, 2L,2L, 3L, 2L,
3L, 3L, 2L, 3L, 2L, 3L, 1L),
.Label = c("Don't Know","No", "Yes"), class =
"factor"),
r3a_6 = structure(c(3L,3L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 2L, 3L, 3L, 2L,
2L, 2L, 3L,2L, 3L, 3L, 3L),
.Label = c("Don't Know", "No", "Yes"), class =
"factor"),
r3a_7 = structure(c(1L, 2L, 2L, 2L, 3L, 2L, 2L, 3L, 3L, 2L,3L, 3L, 2L,
2L, 2L, 2L, 2L, 3L, 3L, 3L),
.Label = c("Don't Know", "No", "Yes"), class =
"factor"),
r3a_8 = structure(c(3L,2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 2L, 3L, 3L, 2L,
3L, 3L, 2L, 2L, 2L, 3L, 3L),
.Label = c("Don't Know", "No", "Yes"), class =
"factor"),
r3a_9 = structure(c(1L, 3L, 2L, 2L, 3L, 2L, 2L, 3L, 3L, 3L,3L, 3L, 2L,
2L, 2L, 3L, 2L, 2L, 3L, 3L),
.Label = c("Don't Know","No", "Yes"), class =
"factor"),
weight = c(0.34, 0.34, 0.34,0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34,
0.34, 0.34, 0.43, 0.43, 0.43, 0.34, 0.34, 0.34, 0.34, 0.34),
seg_2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 1L, 2L, 2L,
1L, 1L, 1L,1L, 1L, 1L, 1L),
.Label = c("1", "2"), class = "factor"),
seg_3 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 1L, 2L, 2L, 2L,
1L, 1L, 1L,1L, 2L, 2L, 2L),
.Label = c("1", "2"), class = "factor"),
seg_4 = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 2L, 2L,
1L, 1L, 1L,1L, 1L, 1L, 1L),
.Label = c("1", "2"), class = "factor")),
.Names = c("r3a_1", "r3a_2", "r3a_3", "r3a_4", "r3a_5", "r3a_6", "r3a_7",
"r3a_8", "r3a_9", "weight", "seg_2","seg_3","seg_4"), row.names = c(NA,
20L), class = "data.frame")
dat_weight <- svydesign(ids = ~1, weights = ~weight, data = dat)
my_funca <- function(mk,y){
my_re <- ldply( mk, function(x)
svytable(bquote(~ y + .(as.name(x))), dat_weight) %>%
as_tibble() %>%
dplyr::group_by({{y}}) %>%
transmute(!!(as.name(x)), Procent = round(n/sum(n,na.rm =
T)*100,2)) %>%
pivot_wider(names_from = (as.name(x)),
values_from = Procent)
)
return(my_re)
}
my_funca(mk =names(dat)[1:9], y = seg_2)
I will appreciate any help you will provide.
Regards,
Vincent Edjabou
Mobile: +45 31 95 99 33
linkedin.com/vincent
<http://linkedin.com/in/vincent-maklawe-edjabou-9742a41b>
Orcid: 0000-0003-2849-6151
[[alternative HTML version deleted]]
More information about the R-help
mailing list