Вычисление координат широты относительно времени в r - PullRequest
0 голосов
/ 18 июня 2020

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

get_coords <- function(df){
  n = df %>% select(airtime) + 1
  df %>%
  pivot_longer(cols = c(origin_lon,origin_lat,dest_lon,dest_lat), 
               names_to = c('col', '.value'),
               names_sep = '_') %>%
  group_by(flight_no) %>%
   summarise(datetime = list(seq(land_time, takeoff_time, length.out = n)),
             lon = list(seq(max(lon), min(lon), length.out = n)), 
             lat = list(seq(min(lat), max(lat), length.out = n))) %>%
   unnest(cols = c(lat, lon))
}

library(dplyr)
library(purrr)
df %>%
    group_split(rn = row_number(), .keep = FALSE)  %>% 
    map_dfr(get_coordinates)

Это выполняет задание и каждую минуту возвращает фрейм данных со значениями flight_no, longitude и latitude, но я также хочу включить значение даты и времени для каждой записи .

Вывод

flight_no    datetime             lon        lat
<chr>      <dbl>  <dbl>
AAA         2019-03-04 06:18:00  -84.42778  33.63667        
AAA         2019-03-04 06:19:00  -84.46479  33.72537        
AAA         2019-03-04 06:20:00  -84.50180  33.81407        
AAA         2019-03-04 06:21:00  -84.53881  33.90277        
AAA         2019-03-04 06:22:00  -84.57582  33.99147        
AAA         2019-03-04 06:23:00  -84.61283  34.08017        
AAA         2019-03-04 06:24:00  -84.64984  34.16887        
AAA         2019-03-04 06:25:00  -84.68685  34.25756        
AAA         2019-03-04 06:26:00  -84.72386  34.34626

1 Ответ

0 голосов
/ 18 июня 2020

Вот способ:

library(dplyr)
library(tidyr)

df %>%
  pivot_longer(cols = c(origin_lon,origin_lat,dest_lon,dest_lat), 
               names_to = c('col', '.value'),
               names_sep = '_') %>%
  group_by(flight_no) %>%
  summarise(datetime = list(seq(first(takeoff_time), 
                                first(land_time), length.out = first(AirTime))),
            lon = list(seq(max(lon), min(lon), length.out = first(AirTime))), 
            lat = list(seq(min(lat), max(lat), length.out = first(AirTime)))) %>%
  unnest(cols = c(lat, lon, datetime))


#  flight_no datetime              lon   lat
#   <chr>     <dttm>              <dbl> <dbl>
# 1 AAA       2019-03-04 06:18:00 -84.4  33.6
# 2 AAA       2019-03-04 06:19:00 -84.5  33.7
# 3 AAA       2019-03-04 06:20:01 -84.5  33.8
# 4 AAA       2019-03-04 06:21:01 -84.5  33.9
# 5 AAA       2019-03-04 06:22:02 -84.6  34.0
# 6 AAA       2019-03-04 06:23:03 -84.6  34.1
# 7 AAA       2019-03-04 06:24:03 -84.7  34.2
# 8 AAA       2019-03-04 06:25:04 -84.7  34.3
# 9 AAA       2019-03-04 06:26:05 -84.7  34.4
#10 AAA       2019-03-04 06:27:05 -84.8  34.4
# … with 469 more rows

Получить данные в длинном формате и создать последовательность между takeoff_time и land_time вместе с широтой и долготой.

...