У меня есть данные, которые выглядят так (но для 14 миллионов человек)
Это значение каждого человека для MB в данном квартале (qtr). Если qtr == 20091001, это период с октября по декабрь 2009 года.
df <- data.frame(
ID = rep(c('ABC1234', 'CED6723', 'GHB9876', "MNR4444", "FRE9823"), 4),
qtr = c(rep('20090101', 5), rep('20090401', 5),rep('20090701', 5),rep('20091001', 5)),
MB = c('0000000', "1234567", "5678910", "1234567",
"9384756", "3456789", NA, '0000000',
"7394857", '0000000', '0000000', '0000000',
"9485967", "9485967", "9485967", '0000000',
'0000000', NA, '4545455', '1987656'
)
)
Что я хочу сделать, это заменить значение MB, где оно равно NA или == '0000000', на самое последнее значение MB.
Правила будут такими: если MB равен NA или 0 в 20091001, я хочу, чтобы значение приходило из 20090701 (если заполнено), затем из 20090401 (если заполнено), а затем из 20090101.
Если MB равен NA или 0 в 20090701, я хочу, чтобы значение приходило из 20090401 (если заполнено), затем 20090101 (если заполнено), затем 20091001.
Если MB равно NA или 0 в 20090401, Я хочу, чтобы значение пришло из 20090101 (если заполнено), затем из 20090701 (если заполнено), затем из 20091001.
Если MB равно NA или 0 в 20090101, я хочу, чтобы это значение пришло из 20090401 (если заполнено) , затем 20090701 (если заполнено), затем 20091001.
Мой идеальный вывод выглядит следующим образом
df2 <- data.frame(
ID = rep(c('ABC1234', 'CED6723', 'GHB9876', "MNR4444", "FRE9823"), 4),
qtr = c(rep('20090101', 5), rep('20090401', 5),rep('20090701', 5),rep('20091001', 5)),
MB = c("1234567", "1234567", "5678910", "1234567",
"9384756", "3456789", "3456789", "3456789",
"7394857", "7394857", "7394857", "7394857",
"9485967", "9485967", "9485967", "9485967",
'4545455', '4545455', '4545455', '1987656'
)
)
Я видел этот ответ r - скопировать пропущенные значения из других переменных Это для данных в широком формате. Нужно ли конвертировать мои данные в широкоформатный формат и изменить метки переменной qtr на 1, 2, 3, 4? Или есть способ сделать это на моем фрейме данных как есть?
Спасибо.