我在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))