【问题标题】:transforming & adding new column in r在 r 中转换和添加新列
【发布时间】:2016-11-21 17:51:21
【问题描述】:

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

例如

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

【问题讨论】:

  • 在基础 R 中,transform(df, previous = ifelse(lag(df$event_type == 1), lag(df$endx), lag(df$x)))

标签: r if-statement dplyr transform rows


【解决方案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

【讨论】:

    【解决方案2】:

    我确信这不是最成功的方式,但您可以使用循环和索引。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-04
      • 1970-01-01
      • 2023-03-17
      • 1970-01-01
      • 2011-06-28
      • 2020-09-26
      • 2015-11-11
      • 1970-01-01
      相关资源
      最近更新 更多