如果在两次之间,如何从另一个表返回值?

Posted

技术标签:

【中文标题】如果在两次之间,如何从另一个表返回值?【英文标题】:How do I return value from another table if between two times? 【发布时间】:2020-04-25 00:26:23 【问题描述】:

我有一个数据集,它查看发生特定“运行”的时间。这是数据集的 head()。

time <- c(15:27.7, 15:27.7, 15:27.8, 15:27.9, 15:28.0) 

我希望返回一个“运行编号”,如果时间值在数据帧中的某个时间之间,它将返回相应的运行。 “查找”表如下。

START   END       Run
  <fct>   <fct>   <int>
1 15:27.7 15:29.1     1
2 20:32.3 20:37.3     2
3 25:57.3 25:58.7     3
4 17:53.8 17:54.0     4

我想要的运行结果应该是:

  TIME     Run
1 15:27.7   1
2 15:27.7   1
3 15:27.8   1
4 15:27.9   1
5 15:28.0   1

我相信我可能需要更改时间格式,但也不确定如何执行此操作。

任何帮助将不胜感激。

【问题讨论】:

这些都是分钟:秒吗? 这些是分钟、秒和毫秒。 【参考方案1】:

是的 - 您必须将所有看起来像查找表中的因素的“时间”转换为日期/时间或“POSIXct”类对象,以便您可以查找这些值。 as.POSIXct 函数可以为您做到这一点。

df$time2 <- as.POSIXct(df$time, format="%M:%OS")
lkup$START <- as.POSIXct(lkup$START, format="%M:%OS")
lkup$END <- as.POSIXct(lkup$END, format="%M:%OS")

然后使用多种方法中的一种,根据主数据框中的时间值从查找表中查找运行值。这里我将使用数据表的非等连接,因为它相当简单。

library(data.table)
setDT(lkup)[setDT(df), on=.(START<=time2, END>=time2), .(id, time, Run)]
   id    time Run
1:  1 15:27.7   1
2:  2 15:29.1   1
3:  3 20:32.3   2
4:  4 25:58.7   3
5:  5 17:53.9   4

数据

df <- structure(list(id = 1:5, time = c("15:27.7", "15:29.1", "20:32.3", 
"25:58.7", "17:53.9")), class = "data.frame", row.names = c(NA, 
-5L))

  id    time
1  1 15:27.7
2  2 15:29.1
3  3 20:32.3
4  4 25:58.7
5  5 17:53.9 

lkup <- structure(list(START = c("15:27.7", "20:32.3", "25:57.3", "17:53.8"
), END = c("15:29.1", "20:37.3", "25:58.7", "17:54.0"), Run = 1:4), class = "data.frame", row.names = c("1", 
"2", "3", "4"))

    START     END Run
1 15:27.7 15:29.1   1
2 20:32.3 20:37.3   2
3 25:57.3 25:58.7   3
4 17:53.8 17:54.0   4

【讨论】:

以上是关于如果在两次之间,如何从另一个表返回值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从另一个工作表中获取单元格值并将其分配给 UDF 的返回值?

如何在PHP中检查时间是不是在两次之间[重复]

如何在两次之间添加每小时计数

返回选定的状态表,然后从另一个表中加入这些状态的计数。 SQL

如何在php中搜索2次之间的查询

如果一个表列为空,如何从另一个表中获取值