2016-11-21 7 views
0

У меня в настоящее время есть фрейм данных, который берется из фида данных событий, которые произошли в хронологическом порядке. Я хотел бы добавить новый столбец на каждую строку моих данных о соответствует EndX предыдущего мероприятия, если предыдущий тип события 1 & х предыдущему событие, если предшествующий тип события не 1преобразование и добавление нового столбца в r

например

player_id <- c(12, 17, 26, 3) 
event_type <- c(1, 3, 1, 10) 
x <- c(65, 34, 43, 72) 
endx <- c(68, NA, 47, NA) 
df <- data.frame(player_id, event_type, x, endx) 
df 
    player_id event_type x endx 
1  12   1  65 68 
2  17   3  34 NA 
3  26   1  43 47 
4   3   10  72 NA 

так конечный результат

player_id event_type x  endx previous 
1  12   1 65  68  NA 
2  17   3 34  NA  68 
3  26   1 43  47  34 
4   3   10 72  NA  47 
+0

В базовой R, 'преобразование (DF, предыдущее = IfElse (лаг (DF $ EVENT_TYPE == 1), задержки (DF $ EndX), задержки (DF $ х)))' –

ответ

1

Мы можем использовать if_else

library(dplyr) 
df %>% 
    mutate(previous = if_else(lag(event_type)==1, lag(endx), lag(x))) 
# player_id event_type x endx previous 
#1  12   1 65 68  NA 
#2  17   3 34 NA  68 
#3  26   1 43 47  34 
#4   3   10 72 NA  47 
0

Я уверен, что это не самый эффективный способ, но вы можете использовать цикл и индексирование.

df$previous <- NA 
for(i in 2: nrow(df)){ 
df[ i , "previous"] <- df[ i-1 , "endx"] 
} 
Смежные вопросы