Я пытаюсь перенести неотмеченные наблюдения вперед и заполнить следующие два отсутствующих наблюдения (хотя я полагаю, что решение этой проблемы было бы широко применимо для переноса наблюдений вперед через n строк ...).
В приведенном ниже примере кадра данных я хотел бы перенести (распространить) значения flag_a
и flag_b
для каждого id
для двух строк. Вот пример моих данных с включенным желаемым результатом:
id <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2)
flag_a <- as.numeric(c(NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA))
flag_b <- as.numeric(c(NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, NA, 1, NA, NA, NA, NA))
flag_a_desired_output <- as.numeric(c(NA, NA, 1, 1, 1, NA, NA, NA, NA, NA, NA, 1, 1, 1, NA, NA, NA, NA))
flag_b_desired_output <- as.numeric(c(NA, NA, NA, 1, 1, 1, NA, NA, NA, NA, NA, NA, NA, 1, 1, 1, NA, NA))
data <- data.frame(cbind(id, flag_a, flag_b, flag_a_desired_output, flag_b_desired_output))
Я попытался использовать следующую функцию переноса последнего наблюдения (LOCF); однако, как и ожидалось, он заполняет все отсутствующие строки, а не только следующие две.
na.locf.na <- function(x, na.rm = FALSE, ...) na.locf(x, na.rm = na.rm, ...)
data <- transform(data, flag_a_locf = ave(flag_a, id, FUN = na.locf.na))
data <- transform(data, flag_b_locf = ave(flag_b, id, FUN = na.locf.na))
Будем очень признательны за любые мысли о том, как это сделать.
id
? Это имеет отношение к вашей проблеме? - person Rich Scriven   schedule 07.06.2014id
- это идентификатор для каждого уникального объекта, содержащегося в общем наборе данных. Причина, по которой я включил его сюда, заключается в том, что еслиflag_a
должен был появиться только на одну строку до конца строк, связанных с этимid
, тогда я бы не хотел, чтобы код переносил наблюдение изid == 1
вперед в первую строку, гдеid == 2
. Имеет ли это смысл? - person Entropy   schedule 07.06.2014