r - 在 full_join() 之后如何用其他来源的数据替换一个来源中的 NA
问题描述
连接两个数据框时,如何将一个数据集中的缺失值替换为另一个数据集中的值?
我的工作示例来自 3 波(时间点)研究,其中一些问题从连续波中省略。我想生成一个完整的数据集,其中包含长格式的所有波,我可以轻松地将其拆分为更小的集合,同时保持所有变量的意义。
这是一些可重现的代码:
df1<-data.frame(id=seq(10),
sex=rep(c(1,2), 5),
age=sample(c(18:24), 10, replace = T),
x = rnorm(10),
wave = rep("wave1", 10))
df2<-data.frame(id=seq(10),
x = rnorm(10),
wave = rep("wave2", 10))
dplyr::full_join(df1, df2)
Joining, by = c("id", "x", "wave")
id sex age x wave
1 1 1 18 0.7236847 wave1
2 2 2 18 0.5730599 wave1
3 3 1 21 2.0341799 wave1
4 4 2 20 -0.1531575 wave1
5 5 1 18 -0.6089901 wave1
6 6 2 18 -0.3233804 wave1
7 7 1 19 -0.1417807 wave1
8 8 2 21 0.9557512 wave1
9 9 1 24 0.6522168 wave1
10 10 2 20 0.1595824 wave1
11 1 NA NA 1.9694018 wave2
12 2 NA NA 1.4153806 wave2
13 3 NA NA 1.1160011 wave2
14 4 NA NA -0.6040353 wave2
15 5 NA NA -0.3750569 wave2
16 6 NA NA 0.4826182 wave2
17 7 NA NA 0.7210480 wave2
18 8 NA NA 1.9068413 wave2
19 9 NA NA 1.5355046 wave2
20 10 NA NA 1.3607414 wave2
我的目标是:根据参与者用 wave1 数据id
替换 wave2 测量中的 NA sex
。age
编辑:请假设,我不再有权访问df1
并且df2
- 我只使用联合数据,实际上还有更多变量伴随着 `NA`s。我应该早点指定这一点。
解决方案
更新
无法访问 df1 和 df2,您可以使用zoo
's na.locf
-function
df <- dplyr::full_join(df1, df2)
library( zoo )
library( data.table )
dt <- setDT(df)[, `:=`( sex = zoo::na.locf( zoo::na.locf( sex, na.rm = FALSE ) ),
age = zoo::na.locf( zoo::na.locf( age, na.rm = FALSE ) ) ), by = id ]
dt
# id sex age x wave
# 1: 1 1 22 -1.03971504 wave1
# 2: 2 2 22 -0.40848104 wave1
# 3: 3 1 18 -0.32354030 wave1
# 4: 4 2 23 0.01220463 wave1
# 5: 5 1 24 0.83800380 wave1
# 6: 6 2 19 0.31674395 wave1
# 7: 7 1 22 -0.62997068 wave1
# 8: 8 2 19 -0.02830660 wave1
# 9: 9 1 23 -0.48257814 wave1
# 10: 10 2 24 -0.82725441 wave1
# 11: 1 1 22 -2.04179796 wave2
# 12: 2 2 22 1.66578389 wave2
# 13: 3 1 18 0.63893257 wave2
# 14: 4 2 23 0.37758646 wave2
# 15: 5 1 24 -1.64174887 wave2
# 16: 6 2 19 -2.93152667 wave2
# 17: 7 1 22 0.14474519 wave2
# 18: 8 2 19 -1.18826640 wave2
# 19: 9 1 23 0.68365951 wave2
# 20: 10 2 24 -0.21636650 wave2
推荐阅读
- excel - 使用列和行的变量搜索 excel 表,并找到它们的交点来着色
- python - 使用 Python Docx 设置表格宽度时遇到问题
- json - 当 typescript 测试文件有单独的 tsconfigs 时,有什么方法可以导入 typescript 源文件?
- unity3d - 如何有效地渲染像素化线?
- javascript - 为什么即使在 API 调用后状态发生变化,React 也不重新渲染组件
- c - 通过函数在 C 中初始化嵌套 SDL_Rect 结构成员的速记或内联方法
- r - R Studio 显示 tidyverse 星球大战数据集中的电影列表
- python - 当父小部件在 tkinter 中最大化时,有没有办法调整子小部件的大小
- c++ - 输出不显示
- elasticsearch - 弹性搜索崩溃