2017-06-07 42 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