2016-06-27 20 views
0

Ich versuche die Anzahl der Zeilen zu zählen, bis ein Wert erreicht ist. Hier ist ein Beispiel-Datensatz:Anzahl der Zeilen zählen, bis ein Wert erreicht wird

trialtype <- c(1,1,0,1,1,0,0,1,0,1) 
RT <- c(100,200,300,400,500,600,700,800,900,950) 
fakedata <- cbind(trialtype,RT) 

Was ich für jeden trialtype = 0 ist tun möchte, die Anzahl der Zeilen darüber zählen, wo trialtype = 1, bis er trifft den Beginn der Spalte (für die erste 0) oder bis es eine weitere 0 (für den Rest der 0) erreicht und einen neuen Vektor erstellt, der die Anzahl der Zeilen enthält. So würde mein gefälschtes Ergebnis für diesen Datensatz etwas, das wie

x <- c(1,2,3,4) 
numones <- c(2,2,0,1) 
fakeresults <- cbind(x,numones) 

Vielen Dank im Voraus aussieht!

+0

Ihr endgültiges 'cbind' funktioniert nicht. Was willst du beim Trialtyp == 1? – lmo

+0

@lmo Ich möchte die Anzahl der Zeilen zählen, bei denen Trialtyp == 1, die vor jedem Trialtyp == 0 erscheint. Also für meine gefälschten Daten gibt es zwei Trialtyp == 1 vor dem ersten Trialtyp == 0. Und für Der zweite Trialtyp == 0, es gibt auch zwei Trialtyp == 0. Aber für meinen dritten Trialtyp == 0 gibt es 0 Trialtyp == 1. Und im Grunde erstellen Sie einen anderen Datenrahmen, der alle diese Informationen verfolgt. –

Antwort

2

Zuerst erhalten Sie die Indizes der Nullen mit einem Gleichheitsvergleich und which(). Berechnen Sie dann diff() minus eins auf dem Indexvektor mit einer vorangestellten Null, um den richtigen Abstand vor dem ersten Index bereitzustellen.

zis <- which(fakedata[,'trialtype']==0); 
data.frame(x=seq_along(zis),numones=diff(c(0L,zis))-1L); 
## x numones 
## 1 1  2 
## 2 2  2 
## 3 3  0 
## 4 4  1 

Dies funktioniert nur, wenn nur Nullen und Einsen in der Eingabespalte vorhanden sind. Wenn es andere Werte gibt und Sie nur diejenigen vor Nullen zählen möchten, dann wird eine komplexere Lösung benötigt.

Verwandte Themen