2016-06-27 38 views
0

我正在計算直到達到某個值的行數。 下面是一個例子數據集:計算直到達到某個值的行數

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) 

我想這樣做是每一個trialtype = 0,指望它上面的行數,其中trialtype = 1,直至碰到欄的開頭(第0 )或直到它遇到另一個0(對於0的其餘部分),並創建一個包含行數的新向量。 所以我對這個數據集假的結果會是這樣,看起來像

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

提前感謝!

+0

您的最終'cbind'不起作用。當trialtype == 1時你想要什麼? – lmo

+0

@lmo我想要計算每個trialtype == 0之前出現的trialtype == 1的行數。因此,對於我的假數據,在第一個trialtype == 0之前有兩個trialtype == 1。第二個試用類型== 0,也有兩個試用類型== 0。但是對於我的第三個試用類型== 0,有0個試用類型== 1.基本上創建另一個數據幀來跟蹤所有這些信息。 –

回答

2

首先,使用相等比較和which()獲得零的索引。然後,計算diff()減去索引向量中的一個,並且預先設置零以提供第一個索引之前的正確距離。

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 

這隻有在輸入列中只有零和1的情況下才有效。如果還有其他值,並且只有在計數爲零之前計數,那麼將需要更復雜的解決方案。