使用datetime列的r dplyr :: left_join无法正确连接
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用datetime列的r dplyr :: left_join无法正确连接相关的知识,希望对你有一定的参考价值。
我有一个大型的日期时间数据集,每年的每一秒都有近一整年的时间。我正在尝试dplyr::left_join
第二个数据集,该数据集的日期时间列的值在第一个数据集的时间范围内。当我加入数据集时,只有少量记录加入(约为45k的约100个),我知道大多数记录应该加入。我正在做的确保列相同的检查包括:
dput(df_all_dates$date_time[1])
dput(df_subset_dates$date_time[1])
这两个产生以下内容:
structure(1485781200, class = c("POSIXct", "POSIXt"), tzone = "")
我还做了以下比较(以下代码中的10
和4701
反映了数据中的相同日期):
as.numeric(df_all_dates$date_time[10]) # produces value 1485785900
as.numeric(df_subset_dates$date_time[4701]) # produces value 1485785900
但是,在连接中,即使datetime值相同,df_subset_dates中的数据也不会连接到结果数据集中。还有其他关于日期时间会导致这些不加入的内容吗?有些值会加入,但我没有看到任何关于为什么这些记录与不加入的记录不同的模式。
以下是实际联接的代码,如果有帮助:
df_all_dates %>%
left_join(df_subset_dates, by = 'date_time')
在我的单独数据集上,使用lubridate :: seconds(date_time)检查两个'by'列显示它们的格式因毫秒而异,但在大多数显示中都没有显示。 “1522267608S”vs“1522267308.443S”(这些不应该匹配,只是为了显示格式)
包装以下一列或两列以删除毫秒对我来说是个窍门:
library(lubridate)
as_datetime(floor(seconds(date_time)))
我还没有对其他案例进行过广泛的测试,但是floor()对我的数据非常有效。可能是round()或ceiling()适用于其他人。
这有点傻,但我想出了问题 - 其中一些dttm包含了毫秒。在使用dput()的几个示例中,我无法看到它们。一旦我删除了这些,数据就可以了。
以上是关于使用datetime列的r dplyr :: left_join无法正确连接的主要内容,如果未能解决你的问题,请参考以下文章
R语言dplyr包mutate_at函数通过名称修改指定数据列的内容(使用统一的函数)实战
R语言dplyr包mutate_all函数一次性处理所有的数据列的内容(使用统一的函数)实战
R语言dplyr包通过数据列的索引重命名数据列实战(Rename Column by Index Position)