Я не думаю, что вы можете использовать zoo::na.locf
для этого, я не думаю, что это учитывает ограничивающий фактор. (Спасибо Хенрику за то, что выправили меня!)
Два решения, и я уверен, что data.table
гуру может добавить соответствующий третий:
База R
do.call("rbind.data.frame",
lapply(split(dat, cumsum(!is.na(dat$type))),
function(d) within(d, type[seq_len(min(nrow(d), counter[1]))] <- type[1])
))
dplyr
library(dplyr)
dat %>%
mutate(grp = cumsum(!is.na(type))) %>%
group_by(grp) %>%
mutate(type = if_else(row_number() <= counter[1], type[1], type)) %>%
ungroup() %>%
select(-grp)
Данные
dat <- read.table(header=TRUE, stringsAsFactors=FALSE, text='
orgid date type counter
12345 1-1-17 sale 3
12345 1-2-17 NA NA
12345 1-3-17 NA NA
78945 1-1-17 NA NA
78945 1-2-17 free 2
78945 1-3-17 NA NA')