2017-04-04 68 views
0

想象我有一個數據幀DF與列增值柱和前一行,如果條件滿足

RT Error Number 
0.2 0  4 
0.3 0  4 
0.3 1  3 
0.4 0  4 
0.2 1  3 
0.2 0  4  
0.3 0  3  

我所做的是增加一列我與

Df["ThirdColumn"] <- 0 

Df的事情:

RT Error Number ThirdColumn 
0.2 0  4  0 
0.3 0  4  0 
0.3 1  3  0 
0.4 0  4  0 
0.2 1  3  0 
0.2 0  4  0 
0.3 0  3  0 

現在我想修改0在ThirdColumn它之前的錯誤== 1張&數== 3 8 和0在ThirdColumn 9

預期結果

RT Error Number ThirdColumn 
0.2 0  4  0 
0.3 0  4  8 
0.3 1  3  0 
0.4 0  4  8 
0.2 1  3  0 
0.2 0  4  9 
0.3 0  3  0 

我想如果語句數是之前的錯誤== 0與數== 3,但我不斷收到錯誤。

回答

0

我們可以which

library(data.table) 
setDT(Df)[which(Error==1 & Number==3)-1, ThirdColumn := 8] 
Df[which(Error==0 & Number==3)-1, ThirdColumn := 9] 
Df 
# RT Error Number ThirdColumn 
#1: 0.2  0  4   0 
#2: 0.3  0  4   8 
#3: 0.3  1  3   0 
#4: 0.4  0  4   8 
#5: 0.2  1  3   0 
#6: 0.2  0  4   9 
#7: 0.3  0  3   0 

爲此我們還可以base R

i1 <- with(Df, which(Error ==1 & Number == 3)-1) 
i2 <- with(Df, which(Error ==0 & Number == 3)-1) 
Df$ThirdColumn[i1] <- 8 
Df$ThirdColumn[i2] <- 9 
+1

謝謝akrun我會嘗試一下,如果它有效,就會回覆upvote。祝你有個好的一天。 –

+1

它的工作原理謝謝你,我提出了你的答案,雖然堆棧沒有考慮到,因爲我的賬戶是新鮮的,IMO這個答案是其他人最容易理解的。 –

1

哪些行符合標準做到這一點?

> W = which((Df$Error==1 | Df$Error==0) & Df$Number==3) 

現在設置行W-1的價值和使用9-Df$Error得到9時Error是0和8時Error爲1:

> Df$ThirdColumn[W-1] = 9-Df$Error[W] 
> 
> Df 
    RT Error Number ThirdColumn 
1 0.2  0  4   0 
2 0.3  0  4   8 
3 0.3  1  3   0 
4 0.4  0  4   8 
5 0.2  1  3   0 
6 0.2  0  4   9 
7 0.3  0  3   0 
0

我們可以使用從dplyrlead得到列的主導價值觀。

library(dplyr) 
Df$ThirdColumn <- with(Df, ifelse(lead(Error) == 1 & lead(Number == 3), 8, 
          ifelse(lead(Error) == 0 & lead(Number) == 3, 9, 0))) 

最後一個數字會在這種情況下,可後來改爲0輕鬆返回NA

Df$ThirdColumn[nrow(Df)] <- 0 

Df 
# RT Error Number ThirdColumn 
#1 0.2  0  4   0 
#2 0.3  0  4   8 
#3 0.3  1  3   0 
#4 0.4  0  4   8 
#5 0.2  1  3   0 
#6 0.2  0  4   9 
#7 0.3  0  3   0