首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果由于采样率不同,数据文件中事件的时间不同,则在两个数据文件中匹配事件

如果由于采样率不同,数据文件中事件的时间不同,则在两个数据文件中匹配事件
EN

Stack Overflow用户
提问于 2022-03-14 13:09:35
回答 1查看 48关注 0票数 1

我需要将刺激码从一个数据文件导出到另一个数据文件,问题是在数据文件A和B中,以不同的采样率记录了刺激开始的时间,这就是为什么不可能及时找到确切的匹配。因此,我需要编写一个R代码,将数据集A中的SCode时间点与与其最近的数据集中B中的一个时点链接起来,并使用该SCode值在dataset B中创建一个Scode变量。但到目前为止我还没找到办法。

示例:

数据集A:包含刺激开始的时间点和刺激标识符代码:

代码语言:javascript
运行
复制
Time <- c("17:02:54.064", "17:03:08.004", "17:03:23.125")
SCode <- c(11, 12, 22)

数据集B:每秒包含8个时间点,没有一个时间点在ms方面与数据集A中的时间点完全匹配:

代码语言:javascript
运行
复制
Time <- c("17:02:54.022", "17:02:54.147", "17:02:54.272", "17:02:54.397", "17:02:54.522", "17:02:54.647", "17:02:54.772", "17:02:54.897", "17:03:08.022", "17:03:08.147", "17:03:08.272", "17:03:08.397", "17:03:08.522", "17:03:08.647", "17:03:08.772", "17:03:08.897", "17:03:23.022", "17:03:23.147", "17:03:23.272", "17:03:23.397", "17:03:23.522", "17:03:23.647", "17:03:23.772", "17:03:23.897")

最后,我需要在dataset B中有一个带有相关刺激代码的SCode变量(例如,从17:02:54.064到17:03:08.004的所有时间点为11 )。

我希望在正确的方向上有任何建议/暗示。

EN

回答 1

Stack Overflow用户

发布于 2022-03-14 13:43:26

使用任何时间将时间转换为datetime类,然后使用data.table在“最近”上合并

代码语言:javascript
运行
复制
library(data.table)  # to merge on nearest
library(anytime)     # to convert datetime

#convert input into a data.table
d1 <- data.table(Time = c("17:02:54.064", "17:03:08.004", "17:03:23.125"),
                 SCode = c(11, 12, 22))

d2 <- data.table(Time = c("17:02:54.022", "17:02:54.147", "17:02:54.272", 
                          "17:02:54.397", "17:02:54.522", "17:02:54.647", 
                          "17:02:54.772", "17:02:54.897", "17:03:08.022", 
                          "17:03:08.147", "17:03:08.272", "17:03:08.397", 
                          "17:03:08.522", "17:03:08.647", "17:03:08.772", 
                          "17:03:08.897", "17:03:23.022", "17:03:23.147", 
                          "17:03:23.272", "17:03:23.397", "17:03:23.522", 
                          "17:03:23.647", "17:03:23.772", "17:03:23.897"))

#covnert to datetime with milliseconds.
#prefix with any date, e.g. today's date, so it converts to datetime object.
d1[, tt := anytime(paste("2022-03-14", Time)) ]
d2[, tt := anytime(paste("2022-03-14", Time)) ]

#then merge on nearest
setkey(d1, tt)
setkey(d2, tt)

d1[ d2, roll = "nearest" ]
#            Time SCode                  tt       i.Time
# 1: 17:02:54.064    11 2022-03-14 18:02:54 17:02:54.022
# 2: 17:02:54.064    11 2022-03-14 18:02:54 17:02:54.147
# 3: 17:02:54.064    11 2022-03-14 18:02:54 17:02:54.272
# 4: 17:02:54.064    11 2022-03-14 18:02:54 17:02:54.397
# 5: 17:02:54.064    11 2022-03-14 18:02:54 17:02:54.522
# 6: 17:02:54.064    11 2022-03-14 18:02:54 17:02:54.647
# 7: 17:02:54.064    11 2022-03-14 18:02:54 17:02:54.772
# 8: 17:02:54.064    11 2022-03-14 18:02:54 17:02:54.897
# 9: 17:03:08.004    12 2022-03-14 18:03:08 17:03:08.022
#10: 17:03:08.004    12 2022-03-14 18:03:08 17:03:08.147
#11: 17:03:08.004    12 2022-03-14 18:03:08 17:03:08.272
#12: 17:03:08.004    12 2022-03-14 18:03:08 17:03:08.397
#13: 17:03:08.004    12 2022-03-14 18:03:08 17:03:08.522
#14: 17:03:08.004    12 2022-03-14 18:03:08 17:03:08.647
#15: 17:03:08.004    12 2022-03-14 18:03:08 17:03:08.772
#16: 17:03:08.004    12 2022-03-14 18:03:08 17:03:08.897
#17: 17:03:23.125    22 2022-03-14 18:03:23 17:03:23.022
#18: 17:03:23.125    22 2022-03-14 18:03:23 17:03:23.147
#19: 17:03:23.125    22 2022-03-14 18:03:23 17:03:23.272
#20: 17:03:23.125    22 2022-03-14 18:03:23 17:03:23.397
#21: 17:03:23.125    22 2022-03-14 18:03:23 17:03:23.522
#22: 17:03:23.125    22 2022-03-14 18:03:23 17:03:23.647
#23: 17:03:23.125    22 2022-03-14 18:03:23 17:03:23.772
#24: 17:03:23.125    22 2022-03-14 18:03:23 17:03:23.897
#            Time SCode                  tt       i.Time
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71468322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档