转型与在r中添加新列

时间:2016-11-21 17:51:21

标签: r if-statement dplyr transform rows

我目前有一个数据框,它取自按时间顺序发生的事件的数据馈送。我想在我的数据的每一行上添加一个新列,如果先前事件类型是1&,则对应于前一个事件的endx。如果先前事件类型不是1

,则前一事件为x

e.g

player_id <- c(12, 17, 26, 3)
event_type <- c(1, 3, 1, 10)
x <- c(65, 34, 43, 72)
endx <- c(68, NA, 47, NA)
df <- data.frame(player_id, event_type, x, endx)
df
     player_id  event_type  x  endx
1        12          1      65   68
2        17          3      34   NA
3        26          1      43   47
4         3         10      72   NA

所以最终结果

  player_id event_type   x     endx  previous
1        12          1   65     68     NA
2        17          3   34     NA     68
3        26          1   43     47     34 
4         3         10   72     NA     47

2 个答案:

答案 0 :(得分:1)

我们可以使用if_else

library(dplyr)
df %>% 
    mutate(previous = if_else(lag(event_type)==1, lag(endx), lag(x)))
#    player_id event_type  x endx previous
#1        12          1 65   68       NA
#2        17          3 34   NA       68
#3        26          1 43   47       34
#4         3         10 72   NA       47

答案 1 :(得分:0)

我确信这不是最有效的方法,但你可以使用循环和索引。

df$previous <- NA
for( i in 2: nrow(df)){
df[ i  , "previous"] <- df[ i-1 , "endx"]
}