行r上的if语句

行r上的if语句,r,if-statement,dataframe,R,If Statement,Dataframe,我目前有一个数据帧,它取自按时间顺序发生的事件的数据提要。如果事件类型为1,结果为1,我想在数据的每一行中添加一个新列,对应于下一个事件的player_id e、 g 非常感谢您的帮助,因为我在r中仍处于初级阶段我们可以使用ifelse和lead library(dplyr) res <- df %>% mutate(next_player_id = ifelse(outcome==1 & event_type == 1,

我目前有一个数据帧,它取自按时间顺序发生的事件的数据提要。如果事件类型为1,结果为1,我想在数据的每一行中添加一个新列,对应于下一个事件的player_id

e、 g


非常感谢您的帮助,因为我在r中仍处于初级阶段

我们可以使用
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
编辑:根据@RHertel的评论添加了
&
条件

或者,我们可以在两步过程中完成这项工作,而不是
ifelse
,即1)创建一个逻辑索引,2)基于我们分配给新列的索引

i1 <- with(df, event_type == 1 & outcome ==1)
df$next_player_id[i1] <- c(df$player_id[-1], NA)[i1]
i1
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
transform(df, next_player_id = ifelse(outcome == 1 & event_type==1, 
                c(player_id[-1], NA), NA))
i1 <- with(df, event_type == 1 & outcome ==1)
df$next_player_id[i1] <- c(df$player_id[-1], NA)[i1]