Подтвердить что ты не робот

Использование R для анализа файлов CSV Surveymonkey

Я пытаюсь проанализировать крупный опрос, созданный с помощью safeymonkey, который содержит сотни столбцов в файле CSV, и формат вывода трудно использовать, поскольку заголовки работают по двум строкам.

  • Кто-нибудь нашел простой способ управления заголовками в CSV файле, чтобы анализ был управляемым?
  • Как другие люди анализируют результаты Surveymonkey?

Спасибо!

4b9b3361

Ответ 1

В конце концов, я сделал распечатку заголовков с использованием libreoffice, обозначенных как V1, V2 и т.д. Затем я просто прочитал в файле как

 m1 <- read.csv('Sheet1.csv', header=FALSE, skip=1)

а затем просто сделал анализ против m1 $V10, m1 $V23 и т.д.

Чтобы обойти беспорядок в нескольких столбцах, я использовал следующую небольшую функцию

# function to merge columns into one with a space separator and then
# remove multiple spaces
mcols <- function(df, cols) {
    # e.g. mcols(df, c(14:18))
        exp <- paste('df[,', cols, ']', sep='', collapse=',' )
        # this creates something like...
        # "df[,14],df[,15],df[,16],df[,17],df[,18]"
        # now we just want to do a paste of this expression...
        nexp <- paste(" paste(", exp, ", sep=' ')")
        # so now nexp looks something like...
        # " paste( df[,14],df[,15],df[,16],df[,17],df[,18] , sep='')"
        # now we just need to parse this text... and eval() it...
        newcol <- eval(parse(text=nexp))
        newcol <- gsub('  *', ' ', newcol) # replace duplicate spaces by a single one
        newcol <- gsub('^ *', '', newcol) # remove leading spaces
        gsub(' *$', '', newcol) # remove trailing spaces
}
# mcols(df, c(14:18))

Без сомнения, кто-то сможет это очистить!

Чтобы убрать Likert-подобные шкалы, я использовал:

# function to tidy c('Strongly Agree', 'Agree', 'Disagree', 'Strongly Disagree')
tidylik4 <- function(x) {
  xlevels <- c('Strongly Disagree', 'Disagree', 'Agree', 'Strongly Agree')
  y <- ifelse(x == '', NA, x)
  ordered(y, levels=xlevels)
}

for (i in 44:52) {
  m2[,i] <- tidylik4(m2[,i])
}

Не стесняйтесь комментировать, потому что, без сомнения, это снова придет!

Ответ 2

Вы можете экспортировать его в удобной форме, которая соответствует R из Surveymonkey, см. ответы на загрузку в формате "Расширенный формат электронных таблиц"

surveymonkey export

Ответ 3

По состоянию на ноябрь 2013 года макет веб-страницы, похоже, изменился. Выберите Analyze results > Export All > All Responses Data > Original View > XLS+ (Open in advanced statistical and analytical software). Затем перейдите в "Экспорт" и загрузите файл. Вы получите исходные данные в качестве первой строки = заголовки вопросов/каждый следующий ответ строки = 1, возможно, разделенный между несколькими файлами, если у вас много ответов/вопросов.

enter image description here

Ответ 4

Как насчет следующего: используйте read.csv() с header=FALSE. Сделайте два массива, один с двумя строками заголовков и один с ответами на опрос. Тогда paste() две строки/предложения вместе. Наконец, используйте colnames().

Ответ 5

Проблема с заголовками заключается в том, что столбцы с "select all the apply" будут иметь пустую верхнюю строку, а заголовок столбца будет следующей строкой. Это только проблема для этих типов вопросов.

С учетом этого я написал цикл, чтобы пройти через все столбцы и заменить имена столбцов на значение из второй строки, если имя столбца было пустым, которое имеет длину символа 1.

Затем вы можете убить вторую строку данных и иметь аккуратный фрейм данных.

for(i in 1:ncol(df)){
newname <- colnames(df)[i]
if(nchar(newname) < 2){
colnames(df)[i] <- df[1,i]
} 

df <- df[-1,]