2017-06-07 43 views
0

我需要創建2列:PRETARGETTARGET基於幾個條件。如何考慮R中的每個觀察的以下和前一行R

要創建預目標,我的每一行數據(每個參與者PPT和審判TRIAL)我需要檢查CURRENT_ID與列CanBePretarget一個0值相關聯,而下面一行是CURRENT_ID + 1的值。如果這些條件得到滿足,那麼,我想有一個0值,如果他們不履行1.

一個創造價值TARGET,我的每一行數據(每個參與者PPT和審判TRIAL)我需要檢查CURRENT_ID與列CanBeTarget一個0值相關聯,並且以前的行的CURRENT_ID值 - 1。如果這些條件都滿足的話,我想有一個0值,如果他們不履行1.

另外一個值,如果結果在預目標是1,那麼目標下一行的值也應該是1.

我在以下示例中添加了所需的輸出。

我想使用for循環和ifelse語句,但我不知道如何考慮每個觀察的以下/前一行。

PPT TRIAL PREVIOUS_ID CURRENT_ID NEXT_ID CURRENT_INDEX CanBePretarget CanBeTarget PRETARGET TARGET 
ppt01 11 2   3   4  3    0    0    0   1 
ppt01 11 3   4   3  4    1    0    1   0 
ppt01 11 4   5   6  8    0    0    1   1 
ppt01 11 6   7   8  10   0    0    1   1 
ppt01 11 7   10   11  18   0    1    0   1 
ppt01 11 10   11   12  19   0    0    0   0 
ppt01 11 11   12   14  20   1    0    1   0 
ppt01 12 1   2   1  2    1    0    1   1 
ppt01 12 2   3   4  5    0    0    1   1 
ppt01 12 5   6   6  8    0    0    0   1 
ppt01 12 6   7   7  10   0    0    0   0 
ppt01 12 7   8   9  12   0    0    0   0 
ppt01 12 8   9   9  13   0    0    0   0 
ppt01 12 9   10   11  16   0    0    0   0 
ppt01 12 10   11   11  17   0    0    0   0 
ppt01 13 1   2   2  2    1    0    1   1 
ppt01 13 3   3   3  10   0    0    1   1 
ppt01 13 4   5   6  13   0    0    0   1 
ppt01 13 5   6   7  14   0    0    1   0 
ppt01 13 9   9   10  19   0    0    0   1 
ppt01 13 9   10   10  20   0    0    0   0 
ppt01 13 10   11   12  22   0    0    0   0 
ppt01 13 11   12   12  23   0    0    1   0 
ppt01 14 10   11   11  15   0    0    0   1 
ppt01 14 11   12   12  17   0    0    1   0 

回答

0

這可以通過使用dplyr

df.new <- df %>% 
      mutate(PRETARGET1 = abs(as.numeric(CanBePretarget == 0 & lead(CURRENT_ID, default = 0) == (CURRENT_ID + 1)) - 1)) %>% 
      group_by(PPT, TRIAL) %>% 
      mutate(TARGET1 = abs(as.numeric((CanBeTarget == 0 & lag(CURRENT_ID, default = 0) == (CURRENT_ID - 1))) -1), 
       TARGET1 = ifelse(lag(PRETARGET1, default = 0) == 1, 1, TARGET1)) 

要比較你的結果來實現,我創建PRETARGET1TARGET1