gpt4 book ai didi

r - 根据R中的日期/时间范围联接数据

转载 作者:行者123 更新时间:2023-12-04 03:54:32 25 4
gpt4 key购买 nike

我有一个具有x,y坐标和日期/时间标识的文件(位置)。我想从第二个表(天气)中获取信息,该表具有“相似的”日期/时间变量和协变量(温度和风速)。诀窍是两个表中的日期/时间不是完全相同的数字。我想从位置数据中选择最接近的天气数据。我知道我需要做一些循环,仅此而已。

Example location                                    example weather

x y date/time date/time temp wind
1 3 01/02/2003 18:00 01/01/2003 13:00 12 15
2 3 01/02/2003 19:00 01/02/2003 16:34 10 16
3 4 01/03/2003 23:00 01/02/2003 20:55 14 22
2 5 01/04/2003 02:00 01/02/2003 21:33 14 22
01/03/2003 00:22 13 19
01/03/2003 14:55 12 12
01/03/2003 18:00 10 12
01/03/2003 23:44 2 33
01/04/2003 01:55 6 22

因此,最终输出将是一张表格,其中包含与位置数据正确“最佳”匹配的天气数据
x    y     datetime               datetime           temp        wind
1 3 01/02/2003 18:00 ---- 01/02/2003 16:34 10 16
2 3 01/02/2003 19:00 ---- 01/02/2003 20:55 14 22
3 4 01/03/2003 23:00 ---- 01/03/2003 00:22 13 19
2 5 01/04/2003 02:00 ---- 01/04/2003 01:55 6 22

有什么建议从哪里开始?我正在尝试在R中执行此操作

最佳答案

我需要将这些数据分别作为数据和时间输入,然后粘贴并格式化

location$dt.time <- as.POSIXct(paste(location$date, location$time), 
format="%m/%d/%Y %H:%M")

weather一样

然后针对 location中的date.time的每个值,在 weather中找到时间差的绝对值最低的条目:
 sapply(location$dt.time, function(x) which.min(abs(difftime(x, weather$dt.time))))
# [1] 2 3 8 9
cbind(location, weather[ sapply(location$dt.time,
function(x) which.min(abs(difftime(x, weather$dt.time)))), ])

x y date time dt.time date time temp wind dt.time
2 1 3 01/02/2003 18:00 2003-01-02 18:00:00 01/02/2003 16:34 10 16 2003-01-02 16:34:00
3 2 3 01/02/2003 19:00 2003-01-02 19:00:00 01/02/2003 20:55 14 22 2003-01-02 20:55:00
8 3 4 01/03/2003 23:00 2003-01-03 23:00:00 01/03/2003 23:44 2 33 2003-01-03 23:44:00
9 2 5 01/04/2003 02:00 2003-01-04 02:00:00 01/04/2003 01:55 6 22 2003-01-04 01:55:00

cbind(location, weather[
sapply(location$dt.time,
function(x) which.min(abs(difftime(x, weather$dt.time)))), ])[ #pick columns
c(1,2,5,8,9,10)]

x y dt.time temp wind dt.time.1
2 1 3 2003-01-02 18:00:00 10 16 2003-01-02 16:34:00
3 2 3 2003-01-02 19:00:00 14 22 2003-01-02 20:55:00
8 3 4 2003-01-03 23:00:00 2 33 2003-01-03 23:44:00
9 2 5 2003-01-04 02:00:00 6 22 2003-01-04 01:55:00

我的答案似乎与您的答案有些不同,但另一位读者已经对您手工正确进行匹配的能力提出了质疑。

关于r - 根据R中的日期/时间范围联接数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5425781/

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