@@ -625,9 +625,15 @@ code_vaccines <- function(input_data, wave) {
625
625
if ( all(c(" V15a" , " V15b" ) %in% names(input_data )) ) {
626
626
# introduced in Wave 11
627
627
vaccine_barriers <- coalesce(input_data $ V15a , input_data $ V15b )
628
- vaccine_barriers <- ifelse(vaccine_barriers == " 13" , NA , vaccine_barriers )
629
- vaccine_barriers <- split_options(vaccine_barriers )
630
-
628
+
629
+ # If the entire column is NA, ifelse() results in a logical vector, not a
630
+ # character vector, which confuses split_options; since the result should be
631
+ # NA anyway
632
+ if (any(! is.na(vaccine_barriers ))) {
633
+ vaccine_barriers <- ifelse(vaccine_barriers == " 13" , NA_character_ , vaccine_barriers )
634
+ vaccine_barriers <- split_options(vaccine_barriers )
635
+ }
636
+
631
637
input_data $ v_vaccine_barrier_eligible <- is_selected(vaccine_barriers , " 1" )
632
638
input_data $ v_vaccine_barrier_no_appointments <- is_selected(vaccine_barriers , " 2" )
633
639
input_data $ v_vaccine_barrier_appointment_time <- is_selected(vaccine_barriers , " 3" )
@@ -685,12 +691,19 @@ code_vaccines <- function(input_data, wave) {
685
691
input_data $ v_vaccine_barrier_type_has <- NA
686
692
input_data $ v_vaccine_barrier_none_has <- NA
687
693
}
688
-
694
+
689
695
if ( " V15b" %in% names(input_data ) ) {
690
696
# introduced in Wave 11
691
- vaccine_barriers <- ifelse(input_data $ V15b == " 13" , NA , input_data $ V15b )
692
- vaccine_barriers <- split_options(vaccine_barriers )
693
-
697
+ # If the entire column is NA, ifelse() results in a logical vector, not a
698
+ # character vector, which confuses split_options; since the result should be
699
+ # NA anyway
700
+ if (any(! is.na(input_data $ V15b ))) {
701
+ vaccine_barriers <- ifelse(input_data $ V15b == " 13" , NA , input_data $ V15b )
702
+ vaccine_barriers <- split_options(vaccine_barriers )
703
+ } else {
704
+ vaccine_barriers <- input_data $ V15b
705
+ }
706
+
694
707
input_data $ v_vaccine_barrier_eligible_tried <- is_selected(vaccine_barriers , " 1" )
695
708
input_data $ v_vaccine_barrier_no_appointments_tried <- is_selected(vaccine_barriers , " 2" )
696
709
input_data $ v_vaccine_barrier_appointment_time_tried <- is_selected(vaccine_barriers , " 3" )
0 commit comments