r - 用上述值填充分类变量中的 NA 值,同时保持 R 中的其他行值
问题描述
编辑:
sujmshyftw 的答案适用于下面的示例代码,但值得指出的是,您需要先使用arrange
,然后才能实际fill
有效部署
原始问题
带有相关问题的一些印度议会选区 (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
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
原始数据集中的相关行号。
感谢您的任何提示!
解决方案
也许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
推荐阅读
- javascript - 如何从嵌套数组动态和递归地呈现列表项?
- python - 从字典中附加行数据似乎“泄漏”
- uno-platform - 为资产提供带有 URL 的 WebView
- reactjs - 如何在 React 中的 Delete all 按钮上删除所有待办事项
- sql - 在一系列先前的行/RECURSIVE/CONNECTED BY 上向后计算列值
- github - 现在在 github-script 中似乎没有一个好的替代 core.exportVariable
- javascript - onclick 函数中的 onclick
- java - 当我尝试从命令行运行 testng 文件时出现异常错误
- arrays - 循环遍历 mongodb 聚合——更好的方法是什么?
- javascript - 基于所选选项的 jQuery 搜索脚本