2012-03-08 40 views
2

我們創建了PDF表單rubrics,用於評估學生的工作。對於一些標準,我們使用複選框幾乎像單選按鈕,除了一些評估者將檢查兩個框以指示部分匹配。我們使用Acrobat Response文件捕獲了課程的反饋,並將其導出爲CSV以供進一步處理。使用R分析PDF表單中的一組複選框

我們想要做的是將(如)4相關複選框的內容轉換爲單個響應值。例如,我們有一個名爲ClarityUClaritySClarityGClarityO複選框其處理在UnacceptableSatisfactoryGood,並且Outstanding水平Clarity標準。我們希望將No, Yes, No, No在適當列下的CSV文件中轉換爲新的Clarity列下的單個Satisfactory

我懷疑order函數可能會有所幫助,但是看不到一個完美的R類方法來完成這個任務。針對同一標準進行多重檢查的問題(對於我來說,目前來說)僅僅是讓事情大部分正確,但我必須弄清楚在某個時候檢查了多個答案!

感謝任何建議的解決方案!

回答

2

您可以使用嵌套ifelse()語句重新編寫假人,雖然有可能是一個更爲R-tastic方式:

resp <- cbind(c(0,0,0,1,1,0,1,0,0,0,0), 
    c(1,0,0,0,0,0,0,1,0,0,1), 
    c(0,1,0,0,0,0,0,0,0,1,0), 
    c(0,0,1,0,0,1,0,0,1,0,0)) 
    colnames(resp) <- c("ClarityU", "ClarityS", "ClarityG", "ClarityO") 

    Clarity <- ifelse(resp[,"ClarityU"]==1,"Unacceptable", 
     ifelse(resp[,"ClarityS"]==1,"Satisfactory", 
     ifelse(resp[,"ClarityG"]==1,"Good","Outstanding"))) 
    resp <- cbind(resp,Clarity) 
    ClarityU ClarityS ClarityG ClarityO Clarity  
    [1,] "0"  "1"  "0"  "0"  "Satisfactory" 
    [2,] "0"  "0"  "1"  "0"  "Good"   
    [3,] "0"  "0"  "0"  "1"  "Outstanding" 
    [4,] "1"  "0"  "0"  "0"  "Unacceptable" 
    [5,] "1"  "0"  "0"  "0"  "Unacceptable" 
    [6,] "0"  "0"  "0"  "1"  "Outstanding" 
    [7,] "1"  "0"  "0"  "0"  "Unacceptable" 
    [8,] "0"  "1"  "0"  "0"  "Satisfactory" 
    [9,] "0"  "0"  "0"  "1"  "Outstanding" 
    [10,] "0"  "0"  "1"  "0"  "Good"   
    [11,] "0"  "1"  "0"  "0"  "Satisfactory" 
+0

你可能想'resp < - data.frame(清晰)'如果你不想強迫所有的人物類型... – 2012-03-08 16:42:43

+0

是的,我猜賈森有'是''不'。漂亮的伎倆,與以前的「sweep()」不相似 – 2012-03-08 16:47:39

1

前面的示例跟進:在沒有部分匹配的,

factor(resp %*% (1:4), 
     labels=c("Unsatisfactory","Satisfactory","Good","Outstanding")) 

作爲解決雙重檢查開始時,你可以從

rowSums(sweep(resp,MARGIN=2,STATS=1:4,FUN="*"))/rowSums(resp>0) 
啓動

這將給你一個從1到4的數字分數,平均多個分數 - 然後你必須決定如何標記非整數值...