【问题标题】:How to change value based on previous and future value row-wise by group如何按组逐行更改基于先前和未来值的值
【发布时间】:2017-05-26 16:08:09
【问题描述】:

问题:我正在尝试使用dplyrave 执行以下操作:

按组 ID,如果给定时间段的 x1 为 0,并且之前 (t-1) 和未来 (t+1) 的值等于 1,则用 1 填充 x1。

     ID = c("1","1","1","1","1","2","2","2","2","3","3","3")
     time = c("1","2","3","4","5","1","2","3","4","1","2","3")
     x1 = as.integer(c("0","1","0","1","1","0","0","0","0","1","0","1"))
     df = data.frame(ID,time,x1)

数据:

  ID time x1 
  1    1  0 
  1    2  1 
  1    3  0 
  1    4  1 
  1    5  1 
  2    1  0 
  2    2  0 
  2    3  0 
  2    4  0 
  3    1  1 
  3    2  0 
  3    3  1 

我试图获得的输出:

  ID time x1 
  1    1  0  
  1    2  1  
  1    3  1  
  1    4  1  
  1    5  1  
  2    1  0  
  2    2  0  
  2    3  0  
  2    4  0  
  3    1  1  
  3    2  1  
  3    3  1  

【问题讨论】:

    标签: r dplyr


    【解决方案1】:
    library(dplyr)
    df %>%
    group_by(id) %>%
    mutate(x1 = ifelse(lead(x1) == 1 & lag(x1) == 1 & x1 == 0, 1, x1))
    

    您可以按 id 分组,并使用 dplyr 中的 leadlag 函数的逻辑来填写 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 2018-12-01
      • 2014-08-25
      • 1970-01-01
      相关资源
      最近更新 更多