我有一个只包含体检日期和感染情况(是/否)的数据框,我想要添加第三列表示最后一次感染的日期。如果患者没有先前的感染记录,则新的“last_infection”列应该为NA。如果他们曾经感染过,它应该显示最近一次感染测试结果为“是”的日期。
我希望输出如下所示:
我希望输出如下所示:
date infection last_infection
01-01-18 no NA
06-01-18 no NA
07-01-18 yes NA
09-01-18 no 07-01-18
01-01-19 no 07-01-18
02-01-19 yes 07-01-18
03-01-19 yes 02-01-19
04-01-19 no 03-01-19
05-01-19 no 03-01-19
我该如何在R中实现这个功能?类似lag()
的函数能否检查条件,或者我需要完全采用其他方法?
first(date)
部分是如何工作的吗? - bobgroup_by
时,“grp” 1的“date”中的第一个观察值将在第3行,而在其上方则为grp 0(因为在“感染”中全部都是“no”)。这就是我使用first
的原因。稍后,我们将用起始的“yes”替换前两个元素的值为NA
。 - akrundf1%>%按(grp = cumsum(infection ==“yes”))%>% mutate(new = if(any(grp > 0)) first(date) else NA)%>%取消组合
。 - akrun