我需要将刺激码从一个数据文件导出到另一个数据文件,问题是在数据文件A和B中,以不同的采样率记录了刺激开始的时间,这就是为什么不可能及时找到确切的匹配。因此,我需要编写一个R代码,将数据集A中的SCode时间点与与其最近的数据集中B中的一个时点链接起来,并使用该SCode值在dataset B中创建一个Scode变量。但到目前为止我还没找到办法。
示例:
数据集A:包含刺激开始的时间点和刺激标识符代码:
Time <- c("17:02:54.064", "17:03:08.004", "17:03:23.125")
SCode <- c(11, 12, 22)
数据集B:每秒包含8个时间点,没有一个时间点在ms方面与数据集A中的时间点完全匹配:
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 )。
我希望在正确的方向上有任何建议/暗示。
发布于 2022-03-14 05:43:26
使用任何时间将时间转换为datetime类,然后使用data.table在“最近”上合并
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
https://stackoverflow.com/questions/71468322
复制