2013-05-13 54 views
3

我有一個矩陣包含問卷的答覆,我希望做一些基本格局檢查,以排除,例如在數字矩陣匹配,受訪者誰只是填補了他們的Scantron公司片鋸齒形圖案。我有一個名爲datonly 1400-通過-50(人逐項目)矩陣,看起來像這樣:模式,使用R

> head(datonly[,1:10]) 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 1 2 4 4 3 4 4 4 4  4 
[2,] 1 1 4 NA 5 5 4 4 4  4 
[3,] 2 2 2 3 3 3 3 3 3  1 
[4,] 3 1 3 2 5 2 3 4 3  4 
[5,] 4 2 3 1 5 3 5 5 3  4 
[6,] 4 2 4 4 5 1 5 4 4  5 

正如你可以看到那裏有NA秒。另外,對於所有問題,可能的有效答案是1到5。

我不知道最有效的方式做到這一點,但這個矩陣是不是很大所以效率不是一個大問題 - 我只是想完成它,而不是流連於這一點,但我可以「T找出一種加工方法爲每一行內檢查,,我是否找到圖形1 2 3 4 5 4 3 2 1。我想我的函數的輸出,以看起來像這樣:

> which(ind==1) 
[1] 24 55 66 67 74 79 83 90 127 131 147 
[12] 154 162 172 221 222 248 260 263 316 339 390 
[23] 402 408 436 440 456 457 460 492 497 504 526 
[34] 544 550 568 583 597 602 623 628 632 639 682 
[45] 684 689 705 727 747 750 751 763 764 769 784 

其中ind是針對每行(人)含有0誰不顯示此模式,和1對每行(人)誰做一個數值向量。在這個例子中,我將受訪者#24,55,66等標記爲可能的不好的答覆者。爲了此事做 - 否則它不會像在Scantron公司片曲折 - 但模式不一定必須在1開始(但是,我行與功能檢查的一個上面給出的模式)。任何幫助深表感謝!

+0

好像你應該能夠建立過這樣的事情'申請(X,1,函數(z)的ABS(DIFF(Z)))' – Chase 2013-05-13 16:08:13

回答

3

據我瞭解,你可能想,

as.numeric(grepl("123454321",apply(datonly,1,paste0,collapse=""))) 
+0

@OP:|'在一個'分開引號添加其他模式。 – Frank 2013-05-13 16:05:43

+0

完美!感謝詹姆斯迅速而準確的迴應! @Frank我也在考慮問這個問題,但是想保持簡單。謝謝你告訴我這件事! – psychometriko 2013-05-13 16:14:05

+0

好像OP是確定這一點,但是這不會趕上與第一答案> 1. – Chase 2013-05-13 16:17:38

4

這裏是基於我的評論一個完整的答案,這將趕上全部序列「關閉一個」:

#random answers 
set.seed(1234) 
x <- matrix(sample(c(1:5, NA), 100, TRUE, prob=c(.19,.19,.19,.19,.19, .05)), ncol = 10) 
#Here's the person you want to flag 
x <- rbind(x, c(1:5,4:1,2)) 



which(
    apply(
    apply(x, 1, function(z) abs(diff(z))),2, 
    function(zz) ifelse(sd(zz, na.rm = TRUE)==0,1,0) 
)== 1) 
#--- 
[1] 11 
+0

啊,好趕上開始序列!我不會注意到(至少,直到我測試了它,也許 - 直到明天才會這樣做)。謝謝你的替代方法! – psychometriko 2013-05-13 16:29:12