nasıl

2013-03-18 30 views
5

(Aşağıdaki kod bir temsilci üretecektir 5 sorudan oluşur, her biri birçok denemeden bir görevin, benim verilerine bir göz atın özel bir işlevle ddply kullanmak ve sonuçla birlikte orijinal veri çerçevesini döndürmek yok alt kümesi):nasıl

Subject<-c(rep(400,20),rep(401,20)) 
RT<-sample(x=seq(250:850),size=40) 
accuracy<-c(1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0) 
trial<-rep(rep(1:4, each=5),2) 
question<-rep(seq(from=0,to=4),8) 
data<-data.frame(Subject,trial,question,RT,accuracy) 
remove(Subject,RT,accuracy,trial,question) 

ve bu gibi bir şey olacaktır:

 ID trial question RT accuracy 
1  400 1  0   131 1 
2  400 1  1   768 1 
3  400 1  2   300 1 
4  400 1  3   130 1 
5  400 1  4   168 1 
... 
36 401 1  0   273 1 
37 401 1  1   803 1 
38 401 1  2   786 0 
39 401 1  3   712 1 
40 401 1  4   254 0 

mevcut doğruluğu değişken her sorunun doğruluğu ifade eder. Belirli bir denemedeki tüm soruların doğru olup olmadığını esas olarak belirten yeni bir değişken oluşturmaya çalışıyorum (örn. Doğruluk = 1). Yukarıdaki 400 için, ortaya çıkan değişken tüm soruların doğru olduğunu gösteren c (1,1,1,1,1) olacaktır. Yukarıdaki konu 401 için, elde edilen veriler, soruların 1 veya daha fazlasının hatalı olduğunu belirten c (0,0,0,0,0) olacaktır. , 1), her denek için ayrı ayrı 2 Her denemede soruları göz önünde bulundurun:

mantık: Bunu başarmak için, bu çözüm ile gelip Plyr ve türevleri hakkında oldukça kafa karıştırıcı yardım dosyası ve örnekleri çözmek için elimden geleni yaptım) aksi takdirde tüm 0 en bu işi gibi görünüyor

vektörü dönmek, tüm 1'lerin vektör dönmek doğrulukları toplamı ise denemede soru sayısı geçirilen verilerin doğruluğu sütununda çerçevesi 2) bakmak:

allOK<-function(x) { 
    c<-length(x[,1]) #get number of questions for this trial 
    s<-sum(x$accuracy) #get sum of accuracies 
    return (data.frame(rep(as.integer(s==c)))) #return allOK vector 
} 

bu m uygulamak için benim girişimi y veri: alloktest'in yalnızca Subject (Konu), trial (deneme) ve sonuçlarla birlikte yeni bir değişken içermesi dışında, çalışır. Sonuçların doğru olduğu doğru olsa da, orijinal veri çerçevesini yeni bir değişkenle (belki de aok olarak adlandırılır) vermeyi umuyordum.

Bunu nasıl sağlıyorsunuz? Açıkçası, bunun için arıyorum:

 ID trial question RT accuracy aok 
1  400 1  0   131 1   1 
2  400 1  1   768 1   1 
3  400 1  2   300 1   1 
4  400 1  3   130 1   1 
5  400 1  4   168 1   1 
... 
36 401 1  0   273 1   0 
37 401 1  1   803 1   0 
38 401 1  2   786 0   0 
39 401 1  3   712 1   0 
40 401 1  4   254 0   0 

Teşekkürler! Aklıma

+2

Eğer soruyu makul başlık izin verir misin. – mnel

+0

üzgün ... Sadece revize o – TSeymour

cevap

4

en basit yaklaşım Bu her konu & deneme kombinasyonunda bulunan, soru başına 1 satır olduğunu varsayar transform

alloktest<-ddply(.data=data,c("Subject","trial"), mutate, 
    aok = sum(accuracy) == length(accuracy)) 

üzerinde plyr varyasyon olan mutate kullanmaktır.

+0

müthiş, ** sayesinde **, hatta her bir denemede son soru doğru olup olmadığını endeksler sonraki değişken için çalışır: 'lastoktest <-ddply (.data = veri, c ("Konu", "deneme"), mutasyon, lastok = doğruluk [uzunluk (doğruluk)] == 1) ' – TSeymour