2011-10-24 87 views
13

我想分析使用surveymonkey創建的大型調查,該調查在CSV文件中有數百列,輸出格式很難用作兩行標題。使用R解析出Surveymonkey csv文件

  • 有沒有人找到一種管理CSV文件中頭文件的簡單方法,以便分析是可管理的?
  • 其他人如何分析Surveymonkey的結果?

謝謝!

+1

你可以發表一個*小* Surveymonkey輸出的例子來說明問題嗎?我可以想象一個解決方案,它使用'readLines'和'n = 2'來讀取(並按摩)標題,並使用'read'。csv' with'skip = 2,header = FALSE'來獲取數據... –

+5

下一次當您運行調查時,使用LimeSurvey(http://www.limesurvey.org/) - 它是開源的,它有一個出口到R設施,工作相當好(披露:我寫了出口模塊) – Andrie

+0

@Ben,文件中的標題是兩行問題名稱/編號,然後在下面的行寫出子問題。一般來說,在屁股處理的總痛苦。 –

回答

6

我到底做了什麼是打印出來使用標註爲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]) 
} 

隨意,因爲沒有疑問,這將再次拿出來發表評論!

0

以下情況如何:使用read.csv()header=FALSE。製作兩個陣列,一個包含兩行標題,另一個包含調查答案。然後paste()兩行/句子在一起。最後,使用colnames()

+0

由於第二行以空字符開頭,所以這恐怕不行。 – Sean

+0

'if(!is.null(second.line)){paste(first.line,second.line)}'''怎麼樣? – power

+1

不幸的是,即使它以一個空字符開頭,第二行仍然有一些有用的信息! – Sean

10

您可以將其導出,從Surveymonkey適合R A方便的形式,請參閱「高級表格格式的下載響應

surveymonkey export

3

2013年11月,網頁佈局似乎已經改變。選擇Analyze results > Export All > All Responses Data > Original View > XLS+ (Open in advanced statistical and analytical software)。然後轉到導出並下載文件。你會得到原始數據作爲第一行=問題標題/每個行= 1響應,如果你有很多回復/問題,可能會在多個文件之間分割。

enter image description here

0

問題與頭是與「選擇所有適用的」列將有一個空白頂行和列標題將低於該行。這只是這些類型問題的一個問題。

考慮到這一點,我寫了一個循環來遍歷所有列,並從第二行的值,如果列名是空白字符其中有1

一個字符長度,然後更換列名,你可以殺死第二行數據並且有一個整齊的數據框。

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

df <- df[-1,]