R,随时间变化作为因子。如何找到最接近某个时间的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R,随时间变化作为因子。如何找到最接近某个时间的值?相关的知识,希望对你有一定的参考价值。

我正在Rstudio中工作,并且有一个因子变量“ Time”。因此,我看到的值的一个示例可能是“ 10:17:38”。目标:我想找出数据集中哪个观测值最接近某个时间,例如“ 09:58:13”。如何在Rstudio中做到这一点?

我已经尝试将值“ 09:58:13”作为单独的变量添加,例如“ Fixed_time”(所有观察值均相同)。然后,想法是通过说出差= Time-Fixed_time并找到“差”的最小绝对值来创建一个新变量。问题是我从未设法获得一种格式,该格式可以让我从另一个中减去一个。我尝试过as.POSIXct,它还会在变量中添加我不需要的今天的年,月和日。能否请你帮忙?谢谢!

答案

[正如其他人已经提到的,示例数据集很重要。

[不知道您的数据,我建议添加日期本身,以避免在更改日期(午夜)时出现问题。

您可以根据需要更改以下代码。请注意,仅在测试用例中插入了几行代码-看看会发生什么。

# --- Create some data ---
dat <- read.table(textConnection("date time observation
2019-11-01 15:01:32 100
2019-11-01 18:26:31 115
2019-11-01 10:17:38 51
2019-11-01 20:23:21 278"), header=TRUE) 
dat

# --- set certain time ---
CertainTime <- "2019-11-01 09:58:13"
SmallestValue <- 86400 # seconds of one day

for(i in 1:4) {
  ObservationTime <- paste(dat[i,1],dat[i,2])
  diff <- difftime(CertainTime, ObservationTime, units = "secs")
  print("-------------------")
  print(CertainTime)
  print(ObservationTime, max.levels=0)
  print(paste("Index", i, "time diff ", diff, "to certain time.")) 


  if(diff*(-1) < SmallestValue){
    SmallestValue <- diff*(-1) 
    print("smaller value found")
    print(SmallestValue)
    SmallestValueindex <- i
  }  
}

print(SmallestValueindex)
print(SmallestValue)

# print oberservation data
print (paste ("Date:", dat[SmallestValueindex,1], "Time:", dat[SmallestValueindex,2], "Observation:", dat[SmallestValueindex,3]))

最后一行代码的输出:

[1] "Date: 2019-11-01 Time: 10:17:38 Observation: 51"

以上是关于R,随时间变化作为因子。如何找到最接近某个时间的值?的主要内容,如果未能解决你的问题,请参考以下文章

获取列表中某个给定数字的3个最接近的值?

如何找到最接近某个数字的数组元素? [复制]

如何在 O(nlogn) 中找到总和最接近零或某个值 t 的子数组

学海泛舟基于横截面和时间序列 预测变量的因子择时

如何将值向上舍入到一个数字的最接近的因子[重复]

R代码可检测多个患者随时间变化的变量