if 行 r 上的语句

L.E*_*and 3 if-statement r dataframe

我目前有一个数据框,它取自按时间顺序发生的事件的数据馈送。如果事件类型为 1 且结果为 1,我想向数据的每一行添加一个新列,该列对应于下一个事件的 player_id

例如

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
Run Code Online (Sandbox Code Playgroud)

所以最终结果

      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
Run Code Online (Sandbox Code Playgroud)

非常感谢我的帮助,因为我仍处于 r 的初学者阶段

akr*_*run 5

我们可以使用ifelselead

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
Run Code Online (Sandbox Code Playgroud)

base Rtransformifelse

transform(df, next_player_id = ifelse(outcome == 1 & event_type==1, 
                c(player_id[-1], NA), NA))
Run Code Online (Sandbox Code Playgroud)

编辑:&根据@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]
Run Code Online (Sandbox Code Playgroud)