2017-04-03 68 views
0

要分析紙張的某些數據,我需要提取滿足條件之前的整個行。提取上一行基於條件的值

比如我有一個錯誤的列和響應時間列

Error ResponseTime 
0  0.22 
0  0.28 
1  0.89 
0  0.92 
1  0.21 

所需的輸出

Error ResponseTime 
0  0.28 
0  0.92 

所以,如果錯誤== 1 提取物上一行,並把它放在一個新的數據幀。

我試圖使用動物園圖書館,但我無法設法使其工作。

我試過這個解決方案:

Dfa1test <- Dfa1test[c(FALSE, head(Dfa1test$error, -1) == 1), , drop = FALSE] 

隨着最後解決的問題是,我得到行+ 1,而不是排-1。

我試圖找到其他的解決方案,但我沒有接近我期望的輸出。

+2

只要做'df [which(df $ Error == 1) - 1,]' –

+0

@Rich Scriven當我這樣做時,我得到行+1而不是行-1 –

+0

我得到了正確的答案。 –

回答

0

下面是使用data.table

library(data.table) 
setDT(df1)[df1[,.I[which(Error==1)-1]]] 
# Error ResponseTime 
#1:  0   0.28 
#2:  0   0.92 

一個選項,如果我們只需要具有0作爲「錯誤」以前的元素時當前元素爲1

setDT(df)[df[, .I[which(shift(Error, fill=999)==0 & Error==1)-1]]] 

注意行:在此例如,他們都給出了相同的結果

+1

嗨akrun,謝謝你的回答!雖然我用Rich Scriven的答案。會嘗試你的! –