РЕДАКТИРОВАТЬ:
Ответ sujmshyftw работает для приведенного ниже примера кода, но стоит отметить, что вам нужно использовать arrange
, прежде чем вы действительно сможете эффективно развернуть fill
ОРИГИНАЛЬНЫЙ ВОПРОС
Фрагмент некоторых данных выборов в избирательный округ Индии (АС) по соответствующей теме выглядит следующим образом:
AC_elections <- structure(list(ST_NAME = c("Gujarat", "Gujarat", "Gujarat", "Gujarat",
"Gujarat", "Gujarat", "Gujarat", "Gujarat", "Gujarat", "Gujarat",
"Madhya Pradesh", "Madhya Pradesh", "Madhya Pradesh", "Madhya Pradesh"
), AC_NO = c(44, 45, 46, 47, 48, 159, 160, 161, 162, 163, 204,
205, 206, 207), DIST_NAME = structure(c(1L, NA, NA, NA, NA, 3L,
NA, NA, NA, NA, 2L, NA, NA, NA), .Label = c("AHMADABAD", "INDORE",
"SURAT"), class = "factor"), UR_TYPE = structure(c(1L, NA, NA,
NA, NA, 1L, NA, NA, NA, NA, 1L, NA, NA, NA), .Label = "Urban", class = "factor"),
YEAR = c(2012, 2012, 2012, 2012, 2012, 2012, 2012, 2012,
2012, 2012, 2013, 2013, 2013, 2013), AC_NAME = c("Ellisbridge",
"Naranpura", "Nikol", "Naroda", "Thakkarbapa Nagar", "Surat East",
"Surat North", "Varachha Road", "Karanj", "Limbayat", "Indore-1",
"Indore-2", "Indore-3", "Indore-4"), AC_TYPE = c("GEN", "GEN",
"GEN", "GEN", "GEN", "GEN", "GEN", "GEN", "GEN", "GEN", "GEN",
"GEN", "GEN", "GEN"), PARTYABBRE = c("BJP", "BJP", "BJP",
"BJP", "BJP", "BJP", "BJP", "BJP", "BJP", "BJP", "BJP", "BJP",
"BJP", "BJP")), row.names = c(974L, 4131L, 4132L, 4133L,
4134L, 1077L, 4143L, 4144L, 4145L, 4146L, 2002L, 4151L, 4152L,
4153L), class = "data.frame")
Значения в DIST_NAME
и UR_TYPE
, которые должны заменить NA
значения, могут быть выведены из AC_NO
, предшествующих этим NA
значениям.Таким образом, мы могли бы исправить это следующим образом:
AC_elections %>%
mutate(
DIST_NAME = case_when(
ST_NAME == "Gujarat" & AC_NO > 44 & AC_NO < 49 ~ "Ahmadabad"
ST_NAME == "Gujarat" & AC_NO > 160 & AC_NO < 164 ~ "Surat"
ST_NAME == "Madhya Pradesh" & AC_NO > 204 & AC_NO < 208 ~ "Indore"
),
UR_TYPE = case_when (
<similar code to above>
)
)
Но я подозреваю, что есть гораздо более эффективное и элегантное решение.Мне было интересно, есть ли что-то вроде функции na.fill
в zoo
, которая применима в этом случае.Обратите внимание, что номера строк с NA
не соответствуют соответствующим AC_NO
в исходном наборе данных.
Спасибо за любые подсказки!