r - 在 R 中合并 2 个具有 all.x = TRUE 的数据帧(x 中的 NA 除外)
问题描述
我有两个大数据框。它们的一个最小的、可重现的示例如下所示:
A <- data.frame(A=c("a","b","c","d"), B=c(1,2,3,4), C=c(1,2,NA,NA), D=c(1,2,3,4))
A
A B C D
1 a 1 1 1
2 b 2 2 2
3 c 3 NA 3
4 d 4 NA 4
B <- data.frame(A=c("c","d"), B=c(3,4), C=c(3,4))
B
A B C
1 c 3 3
2 d 4 4
对于 A 中具有 NA 的每一行,我在 B 中都有对应的行替换缺失值。我想将两个数据框 A 和 B 合并到一个“通用”数据框 AB 中,将数据框 A 列 C 中的 NA 替换为数据框 B 列 C 中的相应值。结果应如下所示:
AB <- data.frame(A=c("a","b","c","d"), B=c(1,2,3,4), C=c(1,2,3,4), D=c(1,2,3,4))
AB
A B C D
1 a 1 1 1
2 b 2 2 2
3 c 3 3 3
4 d 4 4 4
我得到解决方案的“最接近”(也不是那么接近)是使用以下代码:
AB <- merge(A,B, all.x = TRUE)
AB
A B C D
1 a 1 1 1
2 b 2 2 2
3 c 3 NA 3
4 d 4 NA 4
显然,它只使用了 A 中的变量。我已经咨询了以下问题:
请考虑实际数据帧要大得多。如果您需要任何进一步的信息,请告诉我。提前致谢!
解决方案
使用data.table
-package,您可以执行更新连接,它应该在大型数据集上快速运行。
library(data.table)
#set A and B as data.table
setDT(A);setDT(B)
#update col C in data.table A with col C from data.table B, join by cols A and B
A[ B, C := i.C, on = .( A, B) ]
输出
# A B C D
# 1: a 1 1 1
# 2: b 2 2 2
# 3: c 3 3 3
# 4: d 4 4 4
推荐阅读
- c - 每次从函数返回时,我可以重置全局变量的值吗
- python - 无法在 matplotlib 中设置 plt.xticks
- css - 即使使用旧前缀,Flex 属性在 IE 10 中也不起作用
- python - 在 numpy 中从 3d 获取特定的 2d 数组
- angular - 如何使用 videogular2 播放本地视频文件
- python - 是否可以为参数化生成输入?
- c - C Realloc 错误 - 结构中的动态数组
- quanteda - 如何将新的文本数据转换为预定义的 dfm?
- python - Python 'int' 对象在 For 循环中不可调用
- javascript - 如何将 cookie 与数组和 ajax 一起使用?