r - 通过对多个列使用另一个数据表来替换缺失的数据
问题描述
我的表中有很多列,其中缺少数据。如果基于ID
. 我考虑过可能加入这两个表并编写一个 for 循环,其中 if column然后从 columnX
中NA
提取信息Y
,但是,我有很多列并且需要编写许多这些条件。
我想创建一个函数或循环,我可以在其中传递缺少数据的数据列名,并能够从另一个表中传递列名以从中获取信息。
可重现的例子:
ID <- c(1,2,3,4,5,6)
Year <- c(1990,1987,NA,NA,1968,1992)
Month <- c(1,NA,8,12,NA,5)
Day <- c(3,NA,NA,NA,NA,30)
New_Data = data.frame(ID=ID,Year=Year,Month=Month,Day=Day)
ID <- c(2,3,4,5)
Year <- c(NA,1994,1967,NA)
Month <- c(4,NA,NA,10)
Day <- c(23,12,16,9)
Old_Data = data.frame(ID=ID,Year=Year,Month=Month,Day=Day)
预期输出:
ID <- c(1,2,3,4,5,6)
Year <- c(1990,1987,1994,1967,1968,1992)
Month <- c(1,4,8,12,10,5)
Day <- c(3,23,12,16,9,30)
New_Data = data.frame(ID=ID,Year=Year,Month=Month,Day=Day)
解决方案
使用rbind
组合两个数据框,然后我们使用group_by
withsummarise_all
library(dplyr)
rbind(New_Data,Old_Data)%>%group_by(ID)%>%dplyr::summarise_all(function(x) x[!is.na(x)][1])
# A tibble: 6 x 4
ID Year Month Day
<dbl> <dbl> <dbl> <dbl>
1 1 1990 1 3
2 2 1987 4 23
3 3 1994 8 12
4 4 1967 12 16
5 5 1968 10 9
6 6 1992 5 30
推荐阅读
- javascript - 我如何重用几乎没有变化的 React 组件
- vba - VBA OutputTo PDF 也在保存空白报告
- hibernate - 使用 DB2 语法截断 H2Database 中的表
- excel - 将数据正下方的范围粘贴到从特定单元格开始
- c - 如何在c中切片/索引数据
- python - 比较两个数据帧并通过比较一列找到不在第二个数据帧中的行
- node.js - 如何检查记录是否更新或插入成功Angular
- java - Android - 从 FileUtils 实现方法得到错误
- python - 在两个不同列上计算 Pandas Dataframe 中的新行
- mysql - 在 Mysql 中检索 JSON 数组中的 Json 数据的值