r - 如何根据 R 中其他 ID 的单元格值/特征将 ID 的 NA 更改为字符值?
问题描述
我的数据集中存在缺失值的问题。出于某种原因,一些 ID 在“名称”列中缺少一个值。这很奇怪,因为其他 ID(具有相同的代码(我的整个数据集中有更多代码(>10K)和同一年(6 个选项))在该列中确实有一个值。
有人可以帮我找出代码,以便在“名称”列中缺少值的 ID,在“名称”列中获得相同的字符值,如果其他 ID 具有相同的代码和年份,则确实有一个值柱子?
例如:第 4 行的 NA;应改为“医院”;基于相同的代码和年份,另一个 ID。(在我的原始数据框中,有一个 ID 为 2013 和代码 01,名称为“医院”;如果没有,它应该保持 NA)。
旁注:它是面板数据,因此每个 ID 可以在数据集中存在多年(和行;每年是一行),而不是每个人都在每一年。我的数据框中还有更多变量。
> dput(Dataframe[1:7, ])
structure(list(ID = structure(c(1, 2, 2, 2, 2, 2, 2), format.spss = "F9.3"), CODE = c("01", "01", "01","01", "01", "01", "01"), Year = structure(c(2018, 2014, 2018, 2013, 2013, 2015, 2015), format.spss = "F9.3"), Quarter = structure(c(3, 4, 4, 4, 3, 4, 3), format.spss = "F9.3"), Size = c(24.5, 23.25, 24.5, 30, 30, 19.25, 19.25), Names = c("Hospital", "Hospital", "Hospital", NA, "Hospital", NA, "Hospital")), row.names = c(NA, -7L), class = c("tbl_df", "tbl", "data.frame"
A tibble: 7 x 8
ID Gender CODE Year Quarter Size Names
<dbl> <dbl> <dttm> <chr> <dbl> <dbl> <dbl> <chr>
1 1 2 01 2018 3 24.5 Hospital
2 2 1 01 2014 4 23.2 Hospital
3 2 1 01 2018 4 24.5 Hospital
4 2 1 01 2013 4 30 NA
5 2 1 01 2013 3 30 Hospital
6 2 1 01 2015 4 19.2 NA
7 2 1 01 2015 3 19.2 Hospital
选择和检查单个行的工作量太大,我有超过 110 万行..
编辑:如果“名称”列具有(字符)值,也可以将其传输为 1,如果是 NA,则将其传输为 0。
谢谢!
解决方案
我不确定,因为在您的示例中所有名称都相同,但我认为这可能会满足您的需求。
我将下面的示例更改为姓氏为“非医院”。
df <- structure(list(ID = structure(c(1, 2, 2, 2, 2, 2, 2), format.spss = "F9.3"), CODE = c("01", "01", "01","01", "01", "01", "01"), Year = structure(c(2018, 2014, 2018, 2013, 2013, 2015, 2015), format.spss = "F9.3"), Quarter = structure(c(3, 4, 4, 4, 3, 4, 3), format.spss = "F9.3"), Size = c(24.5, 23.25, 24.5, 30, 30, 19.25, 19.25), Names = c("Hospital", "Hospital", "Hospital", NA, "Hospital", NA, "Not Hospital")), row.names = c(NA, -7L), class = c("tbl_df", "tbl", "data.frame") )
原来的
# A tibble: 7 x 6
ID CODE Year Quarter Size Names
<dbl> <chr> <dbl> <dbl> <dbl> <chr>
1 1 01 2018 3 24.5 Hospital
2 2 01 2014 4 23.2 Hospital
3 2 01 2018 4 24.5 Hospital
4 2 01 2013 4 30 NA
5 2 01 2013 3 30 Hospital
6 2 01 2015 4 19.2 NA
7 2 01 2015 3 19.2 Not Hospital
这是更新名称的代码。
df %>%
filter(!is.na(Names)) %>%
select(CODE, Year, Names) %>%
group_by_all() %>%
summarise() %>%
right_join(df, by = c("CODE", "Year")) %>%
rename(Names = Names.x) %>%
select(-Names.y)
输出:
# A tibble: 7 x 6
# Groups: CODE, Year [4]
CODE Year Names ID Quarter Size
<chr> <dbl> <chr> <dbl> <dbl> <dbl>
1 01 2018 Hospital 1 3 24.5
2 01 2014 Hospital 2 4 23.2
3 01 2018 Hospital 2 4 24.5
4 01 2013 Hospital 2 4 30
5 01 2013 Hospital 2 3 30
6 01 2015 Not Hospital 2 4 19.2
7 01 2015 Not Hospital 2 3 19.2
推荐阅读
- powershell - 目标机器上的 PowerShell -TFS 任务,在远程服务器中更改执行策略后安全警告仍然存在
- node.js - 从 dynamoDB getItem 导出值
- pyspark - PySpark - 如果 ID 存在于表 1 和表 2 中,则使用 TRUE 填充表 1 中的列,否则为 FALSE
- javascript - 如何结合两个获取请求来获取我需要的信息?
- android - 我应该使用 ScrollView 还是 RecyclerView 在片段中滚动?
- sql - postgreSQL 将列值作为新列并添加
- sap-cloud-sdk - 覆盖 JsonDeserializer 行为
- graphql - 如何验证是否应该执行下一个查询?
- javascript - 使用 Lodash 查找对象数组中新添加的元素
- python - 熊猫使用列表转换多列的数据类型