【问题标题】:Merging data with data.table roll="nearest" rolls matches across the entire DF将数据与 data.table roll="nearest" 合并在整个 DF 中滚动匹配
【发布时间】:2019-12-06 19:09:27
【问题描述】:

我有两个表,一个示例表和一个消息表。在消息表中,消息记录在跟踪器的采样率之外。我一直在做的是使用 data.table roll 最近将示例消息时间与示例报告中最接近的值相匹配。与其将示例消息返回到最近的时间并为其他所有内容返回 NA,似乎它正在滚动消息直到下一条消息。


library(data.table)
remotes::install.github("dmirman/gazer") # to get the data
library((gazer)


samp <- system.file("extdata", "TJ_samp.xls", package = "gazer")
samp <- data.table::fread(samp, stringsAsFactors = FALSE) # reads in large datasets 

msg <- system.file("extdata", "TJ_msg.xls", package = "gazer")
msg <- data.table::fread(msg, stringsAsFactors = FALSE) # reads in large datasets 
setDT(samp)
setDT(msg)

DT_mesg <- msg[samp, on="time", roll="nearest"] # use this to get close to values in sample report

DT_mesg
 #SR edfs are a nightmare. This makes it so messages are alined with closest values 
get_msg <- DT_mesg %>% 
  group_by(trial, message) %>% 
  top_n(n=1, wt=desc(time)) # there are a lot of useless messages and they occupy the same time stamp. Only take the first message in time. This was one way I tried to deal with the multiple message issue, but it does not return messages close to their actual time. 

get_msg

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    我想通了……

    setDT(samp)
    setDT(msg)
    
    DT_mesg <- msg[samp, on="time", roll=4]
    

    这给了我想要的结果:

    
      trial    time                     message i.trial     x     y  pup Label
         1:     1 3314705 !MODE RECORD CR 250 2 1 L\n       1 958.8 580.8 4043  <NA>
         2:    NA 3314709                        <NA>       1 959.1 576.2 4052  <NA>
         3:    NA 3314713                        <NA>       1 959.8 575.6 4053  <NA>
         4:    NA 3314717                        <NA>       1 960.6 575.2 4056  <NA>
         5:    NA 3314721                        <NA>       1 960.2 579.6 4049  <NA>
    
    

    不知道为什么 roll="nearest" 返回这个:

       trial    time                     message i.trial     x     y  pup Label
         1:     1 3314705 !MODE RECORD CR 250 2 1 L\n       1 958.8 580.8 4043  <NA>
         2:     1 3314709 !MODE RECORD CR 250 2 1 L\n       1 959.1 576.2 4052  <NA>
         3:     1 3314713 !MODE RECORD CR 250 2 1 L\n       1 959.8 575.6 4053  <NA>
         4:     1 3314717 !MODE RECORD CR 250 2 1 L\n       1 960.6 575.2 4056  <NA>
         5:     1 3314721 !MODE RECORD CR 250 2 1 L\n       1 960.2 579.6 4049  <NA>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2021-05-10
      • 2021-04-16
      相关资源
      最近更新 更多