r - 在用于合并的列中合并两个具有重复项的 data.tables
问题描述
我有一个关于合并两个 data.tables 的问题。到目前为止,我在 stackoverflow 或其他任何地方都找不到任何解决方案。因此这里的问题是:
任务:我想根据日期列(date_dawn)合并两个数据表。如您所见,表 A 具有重复的日期,因为我从一天中的多个时间戳 (ts.x) 中获取日期。表 B 每天有一个日期(date_dawn)和一些我需要附加到表 A 的列。
我使用合并得到的错误消息如下:
Error in vecseq(f__, len__, if (allow.cartesian || notjoin || !anyDuplicated(f__, :
Join results in 1469574 rows; more than 588399 = nrow(x)+nrow(i). Check for
duplicate key values in i each of which join to the same group in x over and
over again. If that's ok, try by=.EACHI to run j for each group to avoid the
large allocation. If you are sure you wish to proceed, rerun with
allow.cartesian=TRUE. Otherwise, please search for this error message in the
FAQ, Wiki, Stack Overflow and data.table issue tracker for advice.
示例表 A
date_dawn ts.x ....
1: 2015-09-22 2015-09-22 15:15:00
2: 2015-09-22 2015-09-22 15:20:00
3: 2015-09-23 2015-09-23 15:25:00
4: 2015-09-23 2015-09-23 15:30:00
5: 2015-09-23 2015-09-23 15:35:00
6: 2015-09-24 2015-09-24 15:40:00
示例表 B
date_dawn ts_ss ....
1: 2015-09-22 2015-09-22 16:58:26
2: 2015-09-23 2015-09-23 16:56:09
3: 2015-09-24 2015-09-24 16:53:51
4: 2015-09-25 2015-09-25 16:51:33
5: 2015-09-26 2015-09-26 16:49:16
6: 2015-09-27 2015-09-27 16:46:59
所需的输出将是:
date_dawn ts.x ts_ss ....
1: 2015-09-22 2015-09-22 15:15:00 2015-09-22 16:58:26
2: 2015-09-22 2015-09-22 15:20:00 2015-09-22 16:58:26
3: 2015-09-23 2015-09-23 15:25:00 2015-09-23 16:56:09
4: 2015-09-23 2015-09-23 15:30:00 2015-09-23 16:56:09
5: 2015-09-23 2015-09-23 15:35:00 2015-09-23 16:56:09
6: 2015-09-24 2015-09-24 15:40:00 2015-09-24 16:53:51
到目前为止的问题是任何其他“解决方案”(如在函数 left_join 中,或在合并函数中使用 allow.cartesian = T 如上面的错误消息所假设)使用了 x 和 y 之间匹配的各种组合. 但是我只希望将具有特定 date_dawn 的表 B 的行写入具有相应 date_dawn 的表 A 中的行。
感谢您的任何建议
解决方案:
问题是我在两个表中都有重复项。因此,我必须基于多个列进行合并,或者确保其中一个表中没有重复项。通过这种方式,可以在不获取表 A 和 B 中重复项之间的所有可能组合的情况下进行合并。抱歉,如果我造成了混淆,并感谢社区的支持。
解决方案
我不确定我是否理解这个问题,您可以轻松加入两者,即dplyr
:
df1 <- data.frame(
x = rep(c("x", "y"), 5),
a = sample(1:5, 10, replace = T)
)
df2 <- data.frame(
x = c("x", "y"),
b = LETTERS[1:2]
)
library(dplyr)
left_join(df1, df2, by = "x")
编辑
根据您的评论,您可以使用inner_join
, 您可以阅读 all 的文档?dplyr::join
。
library(dplyr)
# with duplicates
df1 <- data.frame(
date_dawn = sample(
seq.Date(Sys.Date() - 2, Sys.Date(), by = "day"),
10,
replace = TRUE
),
ts.x = seq.Date(Sys.Date() - 9, Sys.Date(), by = "day")
)
df2 <- data.frame(
date_dawn = seq.Date(Sys.Date() - 2, Sys.Date(), by = "day"),
ts_ss = seq.Date(Sys.Date() - 100, Sys.Date() - 98, by = "day")
)
# merge
inner_join(df1, df2, by = "date_dawn")
推荐阅读
- javascript - 如何通过 JavaScript 向 WordPress 插件添加阶乘计算?
- django - 在 AWS Lambda 中调用 Django 函数
- nginx - 如何使用 nginx 和 GeoIP 模块阻止来自特定国家的访问者
- datetime - 更改会话语言会导致“java.text.ParseException: Unparseable date
- discord.js - 如何从通道对象数组中获取消息
- string - 将函数输出分配给 Postgres 变量的语法错误
- pgi - pgf77 vs pgf90 编译软件
- python - 如何根据条件将列值更改为行值
- swift - 将 UITimer 值返回到 mapView - Swift
- javascript - 如何在单页应用程序 (SPA) 中正确配置 Firebase 身份验证?