2015-04-08 2 views
2

У меня есть набор данных лиц с различным числом повторных наблюдений и значения, которое иногда заполняются только в окончательном наблюдении, говорит:Засыпка в данном г

id <- c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3) 
order <- c(1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4) 
value <- c(NA, NA, NA, 3, NA, NA, NA, 6, NA, NA, NA, 1) 
x <- data.frame(id, order, value) 

Где ID представляет каждый индивидуальный, порядок - порядок наблюдений (1 - это, во-первых, увеличение на 1 с последующими наблюдениями), а значение представляет собой некоторое значение, которое требует обратной засыпки (т. е. мне нужно, чтобы NA для каждого идентификатора заполнялись значением, если оно отсутствует).

Я застрял на том, как это сделать. Сначала я пытался приказывать данные:

x <- x[order(x$id, -x$order, x$value),] 

Но я не мог понять, как получить код для работы, выбрав предыдущее замечание, что путь (т.е. если идентификатор = предыдущий идентификатор & значения отсутствует, взять предыдущую версию значения). Данные велики (13 м записей), и там много разных порядков (большинство из них имеют 1 наблюдение, у некоторых может быть до 10). Какой был бы лучший способ сделать это?

+1

Возможно просто 'na.locf (значение)' 'от zoo' пакета –

+0

Не могли бы вы предоставить решение для вашего небольшого примера. –

+0

Также, посмотрите [здесь] (http://stackoverflow.com/questions/7735647/replacing-nas-with-latest-non-na-value) –

ответ

1

Вы можете сначала выбрать только те строки, которые содержат значение:

x2 <- subset(x, x$value != "NA") 

и затем merge два кадра данных, чтобы заполнить пустые слоты со значением вы получили для каждого ID в x2 см value.y колонка:

merge(x, x2, by="id") 

# id order.x value.x order.y value.y 
#1 1  1  NA  4  3 
#2 1  2  NA  4  3 
#3 1  3  NA  4  3 
#4 1  4  3  4  3 
#5 2  1  NA  4  6 
#6 2  2  NA  4  6 
#7 2  3  NA  4  6 
#8 2  4  6  4  6 
#9 3  1  NA  4  1 
#10 3  2  NA  4  1 
#11 3  3  NA  4  1 
#12 3  4  1  4  1 
+0

Спасибо - это другой способ взглянуть на проблему! – user3481829

Смежные вопросы