Код для идентификации и записи отсутствующей метки времени для отсутствующих почасовых данных в CSV с помощью Python или R - PullRequest
0 голосов
/ 05 августа 2020

У меня есть некоторый опыт использования Python и R. Проблема, с которой я столкнулся, заключается в том, что для недостающих почасовых данных на различных станциях также отсутствуют временные метки. Из-за большого размера файла (с 2017 по 2020 год) делать это вручную было бы очень утомительно. Я пытаюсь написать код, который будет проходить через CSV-файл, определять недостающие отметки времени для недостающих данных и вставлять отметки времени с NA или пустым в качестве значения. Может кто-нибудь мне с этим помочь? Я приложил образец изображения исходных данных и того, каким я бы хотел его видеть. Буду очень признателен за любую помощь.

Образец

1 Ответ

0 голосов
/ 05 августа 2020

В R вы можете использовать dplyr::complete() для этой цели:

library(tidyverse) #includes dplyr

# generate dummy full dataset
full_data <- tibble(Date = as.Date(1:24),
              Hour = 1:24) %>%
  expand(Date, Hour) %>%
  mutate(Acc = rnorm(nrow(.)))
full_data
# A tibble: 576 x 3
#   Date        Hour     Acc
#   <date>     <int>   <dbl>
# 1 1970-01-02     1  0.453 
# 2 1970-01-02     2 -0.0518
# 3 1970-01-02     3  0.882 
# 4 1970-01-02     4 -0.386 
# 5 1970-01-02     5 -0.284 
# 6 1970-01-02     6  0.454 
# 7 1970-01-02     7 -0.754 
# 8 1970-01-02     8 -0.213 
# 9 1970-01-02     9  0.610 
# 10 1970-01-02    10  1.29  

# remove some timestamps that are missing
data_with_missing <- full_data %>%
  slice_sample(n=200)

data_with_missing 
# A tibble: 200 x 3
# Date        Hour      Acc
# <date>     <int>    <dbl>
#   1 1970-01-04     4  0.683  
# 2 1970-01-02     6  0.454  
# 3 1970-01-24    10 -1.67   
# 4 1970-01-12     6  1.12   
# 5 1970-01-13     5 -0.786  
# 6 1970-01-04     3 -2.03   
# 7 1970-01-11    22  1.02   
# 8 1970-01-11    15  1.11   
# 9 1970-01-18    22  0.688  
# 10 1970-01-24    14 -0.00612
# ... with 190 more rows

# Now use complete to fill in the missing data
recompleted_data <- data_with_missing %>%
  complete(Date, Hour)

recompleted_data 

# A tibble: 576 x 3
# Date        Hour    Acc
# <date>     <int>  <dbl>
#   1 1970-01-02     1 NA    
# 2 1970-01-02     2 NA    
# 3 1970-01-02     3 NA    
# 4 1970-01-02     4 -0.386
# 5 1970-01-02     5 -0.284
# 6 1970-01-02     6  0.454
# 7 1970-01-02     7 -0.754
# 8 1970-01-02     8 -0.213
# 9 1970-01-02     9 NA    
# 10 1970-01-02    10 NA    
# ... with 566 more rows

# Check that we have the same combinations as in the full dataset
all.equal(full_data[,1:2], recompleted_data[,1:2])
# TRUE
...