The sss
package makes it easy to read and parse survey
data in the sss (triple-s) file
format.
library(sss)
library(dplyr, quietly = TRUE, warn.conflicts = FALSE)
Read a survey file
<- read.sss("sample.sss", "sample.asc") dat
Display the results.
%>%
dat as_tibble()
#> # A tibble: 3 × 17
#> Q1 Q2_1 Q2_2 Q2_3 Q2_4 Q2_5 Q2_6 Q2_7 Q2_8 Q2_9 Q3 Q4_1 Q4_2
#> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <chr> <chr> <chr>
#> 1 Visit… 1 0 1 0 0 0 0 0 1 "Amu… Sher… "Oth…
#> 2 Visit… 0 1 0 0 0 0 0 0 0 " … Nott… <NA>
#> 3 Visit… 1 0 0 1 0 0 0 0 1 "\"M… Other "\"M…
#> # … with 4 more variables: Q5 <dbl>, Q6 <lgl>, Q7 <chr>, Q99 <dbl>
#> # ℹ Use `colnames()` to see all variable names
And view the structure of the file. Note that some columns have
additional attributes with variable.labels
and
lable.table
, e.g. Q99:
str(dat)
#> 'data.frame': 3 obs. of 17 variables:
#> $ Q1 : chr "Visited before within the year" "Visited before that" "Visited before within the year"
#> $ Q2_1: num 1 0 1
#> $ Q2_2: num 0 1 0
#> $ Q2_3: num 1 0 0
#> $ Q2_4: num 0 0 1
#> $ Q2_5: num 0 0 0
#> $ Q2_6: num 0 0 0
#> $ Q2_7: num 0 0 0
#> $ Q2_8: num 0 0 0
#> $ Q2_9: num 1 0 1
#> $ Q3 : chr "Amusement Park " " " "\"Marco's\" Restaurant "
#> $ Q4_1: chr "Sherwood Forest" "Nottingham Castle" "Other"
#> $ Q4_2: chr "Other" NA "\"Maid Marion\" Cafe"
#> $ Q5 : num 12 999 58
#> $ Q6 : logi TRUE TRUE FALSE
#> $ Q7 : chr "Within 3 months" "More than 1 years time" NA
#> $ Q99 : num 1.4 0.9 0.7
#> - attr(*, "variable.labels")= chr [1:17] "Number of visits" "Attractions visited" "Attractions visited" "Attractions visited" ...
#> - attr(*, "label.table")=List of 8
#> ..$ 1 : Named chr [1:3] "1" "2" "3"
#> .. ..- attr(*, "names")= chr [1:3] "First visit" "Visited before within the year" "Visited before that"
#> ..$ 2 : Named chr [1:6] "1" "2" "3" "4" ...
#> .. ..- attr(*, "names")= chr [1:6] "Sherwood Forest" "Nottingham Castle" "\"Friar Tuck\" Restaurant" "\"Maid Marion\" Cafe" ...
#> ..$ 3 : Named chr NA
#> .. ..- attr(*, "names")= chr NA
#> ..$ 4 : Named chr [1:6] "1" "2" "3" "4" ...
#> .. ..- attr(*, "names")= chr [1:6] "Sherwood Forest" "Nottingham Castle" "\"Friar Tuck\" Restaurant" "\"Maid Marion\" Cafe" ...
#> ..$ 5 : Named chr [1:2] "500" "999"
#> .. ..- attr(*, "names")= chr [1:2] "500 or more" "Not stated"
#> ..$ 6 : Named chr NA
#> .. ..- attr(*, "names")= chr NA
#> ..$ 7 : Named chr [1:3] "1" "2" "3"
#> .. ..- attr(*, "names")= chr [1:3] "Within 3 months" "Between 3 months and 1 year" "More than 1 years time"
#> ..$ 99: Named chr NA
#> .. ..- attr(*, "names")= chr NA
Extract the variable labels:
attr(dat, "variable.labels")
#> [1] "Number of visits" "Attractions visited"
#> [3] "Attractions visited" "Attractions visited"
#> [5] "Attractions visited" "Attractions visited"
#> [7] "Attractions visited" "Attractions visited"
#> [9] "Attractions visited" "Attractions visited"
#> [11] "Other attractions visited" "Two favourite attractions visited"
#> [13] "Two favourite attractions visited" "Miles travelled"
#> [15] "Would come again" "When is that most likely to be"
#> [17] "Case weight"
And the label table for question 2:
attr(dat, "label.table")$`2`
#> Sherwood Forest Nottingham Castle "Friar Tuck" Restaurant
#> "1" "2" "3"
#> "Maid Marion" Cafe Mining museum Other
#> "4" "5" "9"