CSVファイルに数百の列があるsurveymonkeyで作成された大規模な調査を分析しようとしていますが、ヘッダーが2行にまたがっているため、出力形式を使用するのは困難です。
- 分析を管理できるように、CSVファイルのヘッダーを管理する簡単な方法を見つけた人はいますか?
- 他の人はSurveymonkeyの結果をどのように分析しますか?
ありがとう!
CSVファイルに数百の列があるsurveymonkeyで作成された大規模な調査を分析しようとしていますが、ヘッダーが2行にまたがっているため、出力形式を使用するのは困難です。
ありがとう!
Surveymonkey から R に適合する便利な形式でエクスポートできます。「高度なスプレッドシート形式」のダウンロード応答を参照してください。
最後に私がしたことは、V1、V2などのラベルが付いたlibreofficeを使用してヘッダーを印刷し、ファイルを次のように読み込んだことです。
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))
間違いなく誰かがこれをきれいにすることができるでしょう!
私が使用したリッカートのような尺度を整理するために:
# 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 つの列に配置するのは少し面倒です。この関数はその問題を修正し、対処するヘッダーが 1 行だけになるようにします。また、マルチパンチの質問に参加するので、上から下へのスタイルの名前付けができます。
#' @param x The path to a surveymonkey csv file
fix_names <- function(x) {
rs <- read.csv(
x,
nrows = 2,
stringsAsFactors = FALSE,
header = FALSE,
check.names = FALSE,
na.strings = "",
encoding = "UTF-8"
)
rs[rs == ""] <- NA
rs[rs == "NA"] <- "Not applicable"
rs[rs == "Response"] <- NA
rs[rs == "Open-Ended Response"] <- NA
nms <- c()
for(i in 1:ncol(rs)) {
current_top <- rs[1,i]
current_bottom <- rs[2,i]
if(i + 1 < ncol(rs)) {
coming_top <- rs[1, i+1]
coming_bottom <- rs[2, i+1]
}
if(is.na(coming_top) & !is.na(current_top) & (!is.na(current_bottom) | grepl("^Other", coming_bottom)))
pre <- current_top
if((is.na(current_top) & !is.na(current_bottom)) | (!is.na(current_top) & !is.na(current_bottom)))
nms[i] <- paste0(c(pre, current_bottom), collapse = " - ")
if(!is.na(current_top) & is.na(current_bottom))
nms[i] <- current_top
}
nms
}
注意すると、名前のみが返されます。通常、.csv をで読み取り...,skip=2, header = FALSE
、変数に保存して、変数の名前を上書きします。また、ALOT が と を設定するのにも役立ちna.strings
ますstringsAsFactor = FALSE
。
nms = fix_names("path/to/csv")
d = read.csv("path/to/csv", skip = 2, header = FALSE)
names(d) = nms
2013 年 11 月現在、Web ページのレイアウトが変更されているようです。を選択しAnalyze results > Export All > All Responses Data > Original View > XLS+ (Open in advanced statistical and analytical software)
ます。次に、[エクスポート] に移動して、ファイルをダウンロードします。生データは、最初の行 = 質問ヘッダー / 次の各行 = 1 つの回答として取得されます。多くの回答 / 質問がある場合は、複数のファイルに分割される可能性があります。
ヘッダーの問題は、「該当するものをすべて選択」を含む列の一番上の行が空白になり、列の見出しが下の行になることです。これは、これらのタイプの質問のみの問題です。
これを念頭に置いて、すべての列を通過し、列名が空白の場合は列名を 2 行目の値に置き換えるループを作成しました。これは文字長が 1 です。
次に、データの 2 行目を削除して、きれいなデータ フレームを作成できます。
for(i in 1:ncol(df)){
newname <- colnames(df)[i]
if(nchar(newname) < 2){
colnames(df)[i] <- df[1,i]
}
df <- df[-1,]
次はどうでしょうか: with を使用read.csv()
しheader=FALSE
ます。2 つの配列を作成します。1 つには 2 行の見出しがあり、もう 1 つには調査への回答があります。次にpaste()
、together の 2 つの行/文。最後に、 を使用しますcolnames()
。