我有一个仅包含体检日期和感染存在(是/否)的数据框,我想添加第三列代表上次感染的日期。如果患者以前没有感染,则新的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()
之类的功能检查条件,还是应该完全执行其他操作?
我有一个仅包含体检日期和感染存在(是/否)的数据框,我想添加第三列代表上次感染的日期。新的last_infection列...
lag
列。在这里,我们仅加载dplyr
,不加载任何其他软件包library(dplyr)
df1 %>%
group_by(grp = cumsum(infection == "yes")) %>%
mutate(new = first(date)) %>%
ungroup %>%
mutate(new = replace(lag(new), seq_len(match(1, grp)), NA)) %>%
select(-grp)
# A tibble: 9 x 4
# date infection last_infection new
# <chr> <chr> <chr> <chr>
#1 01-01-18 no <NA> <NA>
#2 06-01-18 no <NA> <NA>
#3 07-01-18 yes <NA> <NA>
#4 09-01-18 no 07-01-18 07-01-18
#5 01-01-19 no 07-01-18 07-01-18
#6 02-01-19 yes 07-01-18 07-01-18
#7 03-01-19 yes 02-01-19 02-01-19
#8 04-01-19 no 03-01-19 03-01-19
#9 05-01-19 no 03-01-19 03-01-19
fill
,则无需使用cumsum或分组。