编辑:
sujmshyftw的答案适用于下面的示例代码,但值得指出的是,在实际有效地部署fill
之前,您需要使用arrange
原始问题
一些印度议会选区(AC)选举数据的片段与相关问题如下:
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
之后。
谢谢你的提示!
也许是fill
函数?
AC_election = AC_elections %>% fill(DIST_NAME, UR_TYPE)
这会给你
ST_NAME AC_NO DIST_NAME UR_TYPE YEAR AC_NAME AC_TYPE PARTYABBRE
974 Gujarat 44 AHMADABAD Urban 2012 Ellisbridge GEN BJP
4131 Gujarat 45 AHMADABAD Urban 2012 Naranpura GEN BJP
4132 Gujarat 46 AHMADABAD Urban 2012 Nikol GEN BJP
4133 Gujarat 47 AHMADABAD Urban 2012 Naroda GEN BJP
4134 Gujarat 48 AHMADABAD Urban 2012 Thakkarbapa Nagar GEN BJP
1077 Gujarat 159 SURAT Urban 2012 Surat East GEN BJP
4143 Gujarat 160 SURAT Urban 2012 Surat North GEN BJP
4144 Gujarat 161 SURAT Urban 2012 Varachha Road GEN BJP
4145 Gujarat 162 SURAT Urban 2012 Karanj GEN BJP
4146 Gujarat 163 SURAT Urban 2012 Limbayat GEN BJP
2002 Madhya Pradesh 204 INDORE Urban 2013 Indore-1 GEN BJP
4151 Madhya Pradesh 205 INDORE Urban 2013 Indore-2 GEN BJP
4152 Madhya Pradesh 206 INDORE Urban 2013 Indore-3 GEN BJP
4153 Madhya Pradesh 207 INDORE Urban 2013 Indore-4 GEN BJP