【发布时间】:2019-06-26 13:47:24
【问题描述】:
编辑:
sujmshyftw 的回答适用于下面的示例代码,但值得指出的是,您需要先使用 arrange,然后才能有效地部署 fill
原始问题
包含相关问题的一些印度议会选区 (AC) 选举数据的 sn-p 如下所示:
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 值的值可以从这些 NA 值之前的 AC_NO 推导出来。因此,我们可以通过以下方式解决此问题:
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>
)
)
但我怀疑有一个更高效、更优雅的解决方案。我想知道zoo 中的na.fill 函数是否适用于这种情况。请注意,带有NA 的行的行号不遵循原始数据集中的相关AC_NO。
感谢任何提示!
【问题讨论】: