【发布时间】:2017-12-12 14:15:44
【问题描述】:
我正在尝试合并 2 个不同长度的 data.frame。在引用坐标(经度和纬度)的列的值没有相同的位置中,我想要 NA。我正在使用合并,但结果不正确,我不知道我做错了什么。在第二个数据框没有相同坐标的列中应该有 NA (或我期望的),并且当两个 data.frames 中的坐标(列 lon 和 lat)相同时保留值。 这些是我原始数据的一个简短示例,如下所示:
#d1
lon lat MDA8O3
-17.0 32 79.32538
-16.6 32 79.36805
-16.2 32 79.36243
-15.8 32 79.36818
-15.4 32 79.36213
-15.0 32 79.34682
# d2
O3 lon lat
91.09123 13.8 48.50
93.46220 16.6 47.75
90.93342 15.8 48.75
93.77436 13.0 46.75
38.84968 11.8 47.25
93.88587 14.6 47.75
现在,我使用: df
但是,结果不正确:
lon lat MDA8O3 O3
-17 32 79.32538 25.10291
-17 32 79.32538 52.06498
-17 32 79.32538 73.24021
-17 32 79.32538 31.79225
-17 32 79.32538 20.99357
-17 32 79.32538 24.55819
我也尝试使用 all=T,但它不正确。在 O3 列中,那些与第一个 data.frame 的 lon 和 lat 不匹配的 lon 和 lat 应该是 NA。
我做错了什么?我认为可以在这里使用合并,有什么建议吗?
谢谢!
【问题讨论】:
-
尝试使用
dplyr包中的left_join()函数。它应该可以满足您的需求,并且工作方式与merge相同(而且效率更高)。 -
我无法复制您的结果表。当我运行完全相同的代码(使用 all.x = T)时,我得到了 O3 列中的所有 NA,如您所料。
-
当我进行合并时,我得到了所有
NA和O3。我的猜测:你已经分配了一个名为T的变量。始终使用TRUE和FALSE进行逻辑运算。试试merge(d1, d2, by = c("lon", "lat"), all.x = TRUE)。 -
是的,O3 列中的所有数字都不存在于 d1 或 d2 中,这似乎很奇怪。
-
可能是因为数组长度不同?我只对我作为示例放在这里的短样本(这是每个原始数据的头部)做同样的事情,我得到了 NA,就像你一样。但是如果我使用原始数据,我不知道 NA.. 有什么想法吗?
标签: r