我目前有一个数据框,该数据框是从按时间顺序发生的事件的数据馈送中获取的。如果事件类型为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
所以最终结果
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
非常感谢您的帮助,因为我仍处于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
还是在base R
与transform
和ifelse
transform(df, next_player_id = ifelse(outcome == 1 & event_type==1,
c(player_id[-1], NA), 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]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句