2016-08-28 2 views
3

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

например

player_id <- c(12, 17, 26, 3) 
event_type <- c(1, 3, 1, 10) 
outcome <- c(1, 0, 1, 1) 
df <- data.frame(player_id, event_type, outcome) 
df 
    player_id event_type outcome 
1  12   1  1 
2  17   3  0 
3  26   1  1 
4   3   10  1 

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

 player_id event_type outcome next_player_id 
1  12   1  1    17 
2  17   3  0    NA 
3  26   1  1    3 
4   3   10  1    NA 

Помощь мю ч оценили, как я до сих пор в стадии начинающих в г

ответ

4

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

library(dplyr) 
res <- df %>% 
     mutate(next_player_id = ifelse(outcome==1 & event_type == 1, 
               lead(player_id), NA)) 
res 
# player_id event_type outcome next_player_id 
#1  12   1  1    17 
#2  17   3  0    NA 
#3  26   1  1    3 
#4   3   10  1    NA 

Или в base R с transform и ifelse

transform(df, next_player_id = ifelse(outcome == 1 & event_type==1, 
       c(player_id[-1], NA), NA)) 

EDIT: добавлен & состояние, основанное на комментариях @ RHertel

Или вместо ifelse, мы можем сделать это в 2 этапа, т.е. 1) создание логического индекса, и 2) на основе индекса сопоставим новый столбец

i1 <- with(df, event_type == 1 & outcome ==1) 
df$next_player_id[i1] <- c(df$player_id[-1], NA)[i1] 
Смежные вопросы