Проблема с датой и временем программы в датафрейме - PullRequest
0 голосов
/ 26 ноября 2018

Меня попросили пройти стажировку, чтобы написать функцию, которая проходит через фрейм данных с датой и временем и возвращает несколько ячеек строк, которые были за 20 часов до этого.Приложено изображение части кадра данных;ID - номер животного, Дата - когда животное было замечено, Время - время, когда животное было замечено (например, 2 означает 2 часа), Lat и Long - координаты животного.

enter image description here

Затем функция вводит данные (идентификатор, дата + время) и возвращает координаты того места, где было животное за 20 часов до этого (столбцы 4 и 5 кадра данных).).

Сообщение об ошибке всегда одинаково:

Ошибка печати (X): объект 'X' не найден

Похоже,условия в предложении IF никогда не воссоединяются ...

Вот сценарий:

data <- data.frame(GPS_data_for_R) #data contains the excel spreadsheet
data$NewTime <- ymd_h(paste(data$Date,as.character(data$Time))) #a new column is created that merge the Date and the Time columns into a POSIXct format

# This function returns the coordinates of the animal 20h before, depending on the ID, Dtae and Time the user wants
Feeding_coordinates <- function (ID, NewTime){
    for ( i in (1:length(data) ) ) {
      if ( data[i,1] == ID & data[i,6] == as.POSIXct(NewTime,format="%Y-%m-%d %H:%M:%OS", tz="UTC")-72000){ #if the ID of the animal matches the request and if the NewTime - 20h also
        data[i,4] <- X #then X takes the value of the Longitude
        data[i,5] <- Y }# and Y the value of the Lagitude
  }
  print (X)
  print (Y)
}

Я действительно понятия не имею, почему это не работает, поэтому любая помощь очень приветствуетсяЯ уже потратил на это столько времени!

Спасибо, Манон.

1 Ответ

0 голосов
/ 26 ноября 2018

Поскольку (пока) данные не предоставлены (пока), вам сложно помочь.Однако, если ваши данные структурированы так, что каждая строка напоминает один час, и вы хотите получить строку за 20 часов до этого, вы можете использовать dplyr s lag().

library(dplyr)
data %>%
 group_by(ID) %>% # Perhaps optional
 mutate(feed_coord_lat=lag(Lat, 20),
        feef_coord_long=lag(Long, 20))

Это дает вам весь фрейм данных с двумя запаздывающими столбцами координат.Вы также можете создать из этого функцию.

...