r dplyr::使用datetime列的左\u联接未正确联接

r dplyr::使用datetime列的左\u联接未正确联接,r,datetime,join,dplyr,R,Datetime,Join,Dplyr,我有一个很大的datetimes数据集,一年中几乎每一秒都有一整年的数据。我正在尝试dplyr::left_加入第二个数据集,该数据集具有datetime列,其值在第一个数据集中的时间范围内。当我加入数据集时,只有一小部分记录加入(大约45k中的100条),我知道大多数记录都应该加入。我为确保列相同而进行的检查包括: dput(df_all_dates$date_time[1]) dput(df_subset_dates$date_time[1]) 这两种方法都会产生以下结果: 结构(1485

我有一个很大的datetimes数据集,一年中几乎每一秒都有一整年的数据。我正在尝试
dplyr::left_加入第二个数据集,该数据集具有datetime列,其值在第一个数据集中的时间范围内。当我加入数据集时,只有一小部分记录加入(大约45k中的100条),我知道大多数记录都应该加入。我为确保列相同而进行的检查包括:

dput(df_all_dates$date_time[1])
dput(df_subset_dates$date_time[1])
这两种方法都会产生以下结果:

结构(1485781200,class=c(“POSIXct”,“POSIXt”),tzone=“”)

我还进行了以下比较(以下代码中的
10
4701
反映了数据中的相同日期):

但是,在联接中,来自df_子集_日期的数据不会联接到结果数据集中,即使日期时间值相同。datetimes是否还有其他原因导致这些不加入?有些值确实存在连接,但我看不到任何模式来解释为什么这些记录与未连接的记录不同

以下是实际联接的代码(如果有帮助):

df_all_dates %>%
 left_join(df_subset_dates, by = 'date_time')

这有点傻,但我解决了问题——一些dttm中包含毫秒。除了在几个使用dput()的示例中,我在任何地方都看不到它们。一旦我删除了这些,数据就很好地结合在一起了。

在我的单独数据集上,用lubridate::seconds(date\u time)检查两个“by”列,显示它们由于毫秒的原因格式不同,尽管在大多数显示中都没有显示出来。“1522267608S”与“1522267308.443S”之间(它们不应该匹配,只是为了显示格式)

将以下列中的一列或两列包装以删除毫秒,这对我来说是个好办法:

library(lubridate)
as_datetime(floor(seconds(date_time)))

我没有广泛测试过其他案例,但floor()对我的数据非常有效。可能是round()或天花板()适用于其他人。

请提供一个可复制的示例我过去在加入日期时遇到问题。。。不完全是你们在这里描述的,但我会把它们转换成数字,连接,再转换回来。如果没有一个更详细的例子,就很难诊断。如果OP能做出一个可重复的例子,他们就会知道解决方案!我发现这个问题和答案很有帮助。将日期更改为数字不会显示任何即时问题。我在两个日期都使用了lubridate::seconds(),发现jstauss的答案很有用。使用lubridate::seconds(),我发现一列显示的结果类似于“1522267608S”,另一列显示的结果类似于“1522267308.443S”(这两列不应该匹配,只是一个格式示例)。用不同的方式来看待同一个问题,就是这样。谢谢你的回复!
library(lubridate)
as_datetime(floor(seconds(date_time)))