R, переменная во времени как фактор. Как найти значение, наиболее близкое к определенному времени? - PullRequest
0 голосов
/ 01 ноября 2019

Я работаю в Rstudio, и у меня есть фактор-переменная «Время». Итак, примером значения, которое я вижу, может быть «10:17:38». Цель: я хочу выяснить, какое наблюдение в наборе данных ближе всего к определенному времени, скажем «09:58:13». Как я могу это сделать в Rstudio?

Я попытался добавить значение «09:58:13» в качестве отдельной переменной, например «Fixed_time» (то же самое значение для всех наблюдений). Тогда идея состояла в том, чтобы создать новую переменную с помощью разности = Time-Fixed_time и найти минимальное абсолютное значение «разности». Проблема в том, что мне так и не удалось получить формат, который позволил бы мне вычитать одно из другого. Я пробовал as.POSIXct, который также добавляет сегодняшний год, месяц и день, которые мне не нужны в моей переменной. Не могли бы вы помочь? Спасибо!

1 Ответ

0 голосов
/ 01 ноября 2019

Как уже упоминали другие, важен пример набора данных.

Не зная ваших данных, я рекомендую добавить сам день, чтобы избежать проблем при смене дня (полуночи).

Вы можете изменить следующий код в соответствии с вашими потребностями. Обратите внимание, что некоторые строки кода вставлены только для тестового примера - посмотрите, что произойдет.

# --- 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...