【问题标题】:if statements on rows r行 r 上的 if 语句
【发布时间】:2016-08-28 07:21:27
【问题描述】:

我目前有一个数据框,它取自按时间顺序发生的事件的数据馈送。如果事件类型为 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 的初学者阶段

【问题讨论】:

    标签: r if-statement dataframe


    【解决方案1】:

    我们可以使用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
    

    或者在base R 中加上transformifelse

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

    编辑:根据@RHertel 的 cmets 添加了&amp; 条件

    或者代替ifelse,我们可以分两步执行此操作,即1)创建逻辑索引,2)基于我们分配新列的索引

    i1 <- with(df, event_type == 1 & outcome ==1)
    df$next_player_id[i1] <- c(df$player_id[-1], NA)[i1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2023-03-26
      • 2020-09-06
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      相关资源
      最近更新 更多