gpt4 book ai didi

R – 如何按最近的时间日期连接两个数据框?

转载 作者:行者123 更新时间:2023-12-01 09:15:37 25 4
gpt4 key购买 nike

我有 2 个数据集,每个数据集都包含一个 POSIXlt 格式的日期时间值,以及一些其他数字和字符变量。

我想根据日期时间列组合两个数据集。
但是两个数据集的日期戳不匹配,所以我需要按最近的日期(之前或之后)将它们组合起来。
在我的示例中,2016-03-01 23:52:00 的数据值“e”需要与 2016-03-02 00:00:00 的“binH”组合,而不是“binG”。

是否有一个函数可以让我按最接近的日期时间值组合我的数据集,即使是在之后?

我找到了使用 cut() 函数或 data.tables 中的 roll=Inf 函数将日期组合到下一个日期的方法。但是我无法将时间戳转换为 roll='nearest' 可接受的任何格式。

    >df1
date1 value
1 2016-03-01 17:52:00 a
2 2016-03-01 18:01:30 b
3 2016-03-01 18:05:00 c
4 2016-03-01 20:42:30 d
5 2016-03-01 23:52:00 e

>df2
date2 bin_name
1 2016-03-01 17:00:00 binA
2 2016-03-01 18:00:00 binB
3 2016-03-01 19:00:00 binC
4 2016-03-01 20:00:00 binD
5 2016-03-01 21:00:00 binE
6 2016-03-01 22:00:00 binF
7 2016-03-01 23:00:00 binG
8 2016-03-02 00:00:00 binH
9 2016-03-02 01:00:00 binI

最佳答案

data.table 应该适用于此(您能解释一下您遇到的错误吗?),尽管它确实倾向于自行将 POSIXlt 转换为 POSIXct(也许手动在您的日期时间列上进行该转换以使 data.table 满意)。还要确保在使用 roll 之前设置键列。

(我在这里创建了我自己的示例表,让我的生活更轻松一些。如果你想在你的表上使用 dput,我很乐意用你的数据更新这个示例):

new <- data.table( date = as.POSIXct( c( "2016-03-02 12:20:00", "2016-03-07 12:20:00", "2016-04-02 12:20:00" ) ), data.new = c( "t","u","v" ) )
head( new, 2 )

date data.new
1: 2016-03-02 12:20:00 t
2: 2016-03-07 12:20:00 u

old <- data.table( date = as.POSIXct( c( "2016-03-02 12:20:00", "2016-03-07 12:20:00", "2016-04-02 12:20:00", "2015-03-02 12:20:00" ) ), data.old = c( "a","b","c","d" ) )
head( old, 2 )


date data.old
1: 2016-03-02 12:20:00 a
2: 2016-03-07 12:20:00 b

setkey( new, date )
setkey( old, date )

combined <- new[ old, roll = "nearest" ]
combined

date data.new data.old
1: 2015-03-02 12:20:00 t d
2: 2016-03-02 12:20:00 t a
3: 2016-03-07 12:20:00 u b
4: 2016-04-02 12:20:00 v c

我故意使两个表的行长度不同,以显示滚动连接如何处理多个匹配项。您可以切换它的连接方式:
combined <- old[ new, roll = "nearest" ]
combined

date data.old data.new
1: 2016-03-02 12:20:00 a t
2: 2016-03-07 12:20:00 b u
3: 2016-04-02 12:20:00 c v

关于R – 如何按最近的时间日期连接两个数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39282749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com