This survey had only 13 responses. So it is just as easy to look through the responses from the raw csv file. Also, google forms itself summarizes the responses. The purpose of creating the summary using R is to learn to process the format in which google forms stores survey data using R.
The following chunk loads the survey data
# Load libraries
library(tidyverse)
library(gt)
# load survey data
surveydf = read_csv("IndyUseRSurvey.csv")
surveydf
## # A tibble: 13 x 15
## Timestamp `What are you l… `What are some … `Would you like…
## <chr> <chr> <chr> <chr>
## 1 2019/01/… Exposure to app… My busy schedule Indifferent
## 2 2019/01/… Exposure to app… Location of Mee… Indifferent
## 3 2019/01/… Build experienc… My busy schedul… Yes
## 4 2019/01/… Exposure to app… Time of Meetup;… Indifferent
## 5 2019/01/… Build experienc… Location of Mee… Yes
## 6 2019/01/… Build experienc… Strict company … Yes
## 7 2019/01/… Build experienc… My busy schedul… Indifferent
## 8 2019/01/… Build experienc… No Barriers Yes
## 9 2019/01/… Exposure to app… Location of Mee… Yes
## 10 2019/01/… Build experienc… Location of Mee… Yes
## 11 2019/01/… Build experienc… Location of Mee… Yes
## 12 2019/01/… Build experienc… My busy schedul… Yes
## 13 2019/01/… Build experienc… My busy schedul… Yes
## # ... with 11 more variables: `List your preference for type of
## # Topics` <chr>, `List any specific topics that you want to see covered
## # in the meetup` <chr>, `Would a day of R training on a Saturday
## # covering basics of data manipulation, plotting etc. be of
## # interest?` <chr>, `If interested in a day of R training, what is the
## # maximum fee that should be charged?` <chr>, `List your preferred days
## # for meetup` <chr>, `List your preferred locations for meetup in
## # Indianapolis (north side, downtown etc.)` <chr>, `Would you like to
## # present in the meetup?` <chr>, `If you would like to present, list
## # topic or topics that you would be interested in presenting` <chr>,
## # `What is your R experience level?` <chr>, `List R packages that you
## # commonly use` <chr>, `List any other feedback that is not captured
## # above` <chr>
This format is not convenient to work with. Each respondents answers are across the row. Also, multiple responses to a single question appear in the same field separated by semicolon. Next, I convert the data to a tall format since that is easier to work with.I used the list-column and unnest feature to separate multiple responses to a single question into individual rows.
# gather all questions/answers in tall format
surveydf = surveydf %>% select(-Timestamp) %>% mutate(id = seq(1, nrow(surveydf)))
# split responses where more than one response is given to a question
surveydf_g = surveydf %>% gather(question, answer, -id)
surveydf_g = surveydf_g %>% mutate(anssplit = strsplit(answer,";")) %>% unnest(anssplit)
surveydf_g = surveydf_g %>% mutate(anssplit = str_wrap(anssplit, 30))
# question list
questions = surveydf_g %>% distinct(question)
questions = questions$question
surveydf_g
## # A tibble: 236 x 4
## id question answer anssplit
## <int> <chr> <chr> <chr>
## 1 1 What are you look… Exposure to application … "Exposure to applic…
## 2 2 What are you look… Exposure to application … "Exposure to applic…
## 3 2 What are you look… Exposure to application … Networking
## 4 3 What are you look… Build experience/experti… "Build experience/e…
## 5 3 What are you look… Build experience/experti… "Exposure to applic…
## 6 3 What are you look… Build experience/experti… Networking
## 7 4 What are you look… Exposure to application … "Exposure to applic…
## 8 5 What are you look… Build experience/experti… "Build experience/e…
## 9 5 What are you look… Build experience/experti… Networking
## 10 6 What are you look… Build experience/experti… "Build experience/e…
## # ... with 226 more rows
# function to get bar plot for multiple choice questions
getbarplot = function(quest) {
p = ggplot(surveydf_g %>% filter(question == quest) %>% count(anssplit)) +
geom_col(aes(x = fct_reorder(anssplit, n), y = n), width = 0.5, fill = "lightblue") +
xlab("") + ylab("# responses") +
coord_flip() + theme_bw() + ggtitle(str_wrap(quest))
return(p)
}
Next, we get the counts of choices for the multiple choice questions
barplotq = c(1, 2, 3, 4, 6, 7, 8, 10, 12)
for(i in barplotq) {
p = getbarplot(questions[i])
print(p)
}
Next, we list the reponses to open ended questions and use the awesome new gt package to format it nicely
openrespq = surveydf_g %>% filter(question %in% questions[c(5, 9, 11, 13, 14)]) %>%
filter(!is.na(anssplit)) %>% select(question, anssplit) %>%
rename(response = anssplit)
openrespq %>% mutate(dummy = " ") %>% gt(rowname_col = "dummy", groupname_col = "question")
response | |
---|---|
List any specific topics that you want to see covered in the meetup | |
Embedded html -r applications | |
Integration with SQL and non- SQL DBs. Integration with Tableau and JMP | |
Anything manufacturing and quality related | |
Risk analysis using R (insurance), geospatial, R in cloud | |
introduction to tidy verse | |
R server and R markdown | |
List your preferred locations for meetup in Indianapolis (north side, downtown etc.) | |
North side | |
South | |
Downtown | |
Downtown, north side (in order of preference) | |
Downtown | |
downtown | |
northside | |
North | |
North side, free parking | |
Northside is ok if accessable. Other ok if not a traffic tough area. | |
north side, but not a strong preference | |
Downtown, Broad Ripple | |
no preference (I likely am too far and won't attend in person) | |
If you would like to present, list topic or topics that you would be interested in presenting | |
Not sure right now. I presented a couple of years ago but now I'm working mainly in JMP and Tableau | |
Geospatial analysis using R | |
demographic data with maps, etc. | |
List R packages that you commonly use | |
None | |
ggplot2, dplyr, etc. The usual Tidy Verse stuff. Also, highly dependent on the specific analysis. | |
tidyverse packages, ggplot2 | |
raster, sf, sp, rgdal, mapview, data.table, ggplot2 | |
drake, txtq, dplyr, tibble, reprex, clustermq, future, batchtools, TSDT | |
ggplot1, dplyr | |
Markdown, forecast, shiny, tidyverse | |
tidy, acs-r,etc. | |
Shiny, machine learning. | |
List any other feedback that is not captured above | |
All is well!!!! | |
The lack of networking coupled with the long drive are why I haven't been attending. Also, a couple of the presentation were so bad that I wouldn't drive around the block for them. | |
I only go to meetups if a topic is posted. Never 'TBD'. | |
I haven't used r in over a year, and never attended a meeting, so the online option will be a plus. | |
I am more than an hour from Indy, so some of my answers reflect that. I hope the option to join remotely is popular. That would be great. Thank you! |
sessionInfo()
## R version 3.3.1 (2016-06-21)
## Platform: x86_64-apple-darwin13.4.0 (64-bit)
## Running under: OS X 10.13.6 (unknown)
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] bindrcpp_0.2.2 gt_0.1.0 forcats_0.3.0 stringr_1.3.1
## [5] dplyr_0.7.8 purrr_0.2.4 readr_1.1.1 tidyr_0.8.2
## [9] tibble_1.4.2 ggplot2_3.1.0 tidyverse_1.2.1
##
## loaded via a namespace (and not attached):
## [1] tidyselect_0.2.5 reshape2_1.4.1 haven_1.1.0 lattice_0.20-33
## [5] colorspace_1.2-6 htmltools_0.3.6 yaml_2.1.16 utf8_1.1.3
## [9] rlang_0.3.0.1 pillar_1.3.0 foreign_0.8-66 glue_1.3.0
## [13] withr_2.1.2 modelr_0.1.2 readxl_1.0.0 bindr_0.1.1
## [17] plyr_1.8.4 commonmark_1.7 munsell_0.5.0 gtable_0.2.0
## [21] cellranger_1.1.0 rvest_0.3.2 psych_1.7.8 evaluate_0.10.1
## [25] labeling_0.3 knitr_1.19 parallel_3.3.1 fansi_0.4.0
## [29] broom_0.4.2 Rcpp_1.0.0 checkmate_1.8.5 backports_1.1.2
## [33] scales_1.0.0 jsonlite_1.5 mnormt_1.5-5 hms_0.4.2
## [37] digest_0.6.13 stringi_1.2.4 grid_3.3.1 rprojroot_1.3-2
## [41] cli_1.0.1 tools_3.3.1 sass_0.1.0.9000 magrittr_1.5
## [45] lazyeval_0.2.0 crayon_1.3.4 pkgconfig_2.0.1 xml2_1.1.1
## [49] lubridate_1.7.1 assertthat_0.2.0 rmarkdown_1.8 httr_1.3.1
## [53] rstudioapi_0.7 R6_2.2.2 nlme_3.1-128