如何将一行从一列匹配到R中的另一列中的下一个5-10行?

  • 本文关键字:一列 下一个 5-10行 一行 r match
  • 更新时间 :
  • 英文 :


我在R中有一个表(点击下面的链接(查看我的表)),它显示了每天两个事件的观察结果:observ1和observ2。我想在其中添加第三列,称为"check"。在列检查中,如果observ1等于1,我应该得到一个TRUE值,并且在5到10天后,observ2也等于1。

如表中所示,第14行的检查值为TRUE。原因是第6行上的observ1为1,9天后,observ2也为1。

我不知道如何在R中编写此代码并得到列'检查'。感谢任何帮助!

看我这里的表

这不是一个好的提问方式,通常大多数发帖者会在他们的数据框架上使用dput()来提供他们的数据样本,以便在问题中上传。这个函数的结果以我在下面所做的格式从控制台复制和粘贴(见数据)。对于将来的问题,这被认为是很好的练习。无论如何,希望这个解决方案有所帮助:

Base R解:

df1$check <- with(
df1, 
vapply(
seq_along(observ2),
function(i){
if(i - 5 <= 0){
NA
}else{
ir <- max(i-10, 1)
ir2 <- (any(observ1[ir:(i-5)] == 1) & observ2[i] == 1)
ifelse(ir2, ir2, NA)
}
},
logical(1)
)
)

数据:

df1 <- structure(list(day = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 
13, 14, 15, 16, 17, 18, 19, 20), observ1 = c(1, 0, 0, 0, 0, 1, 
0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0), observ2 = c(0, 0, 
0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1)), class = c("tbl_df", 
"tbl", "data.frame"), row.names = c(NA, -20L))

相关内容

最新更新