Вставка строки в недостающие почасовые данные в R с использованием пакета padr - странная ошибка

Я новичок в R, и у меня возникли некоторые проблемы с пакетом padr, описанным здесь.

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

Данные под названием Mendo представлены в виде:

Date.Local    Time.Local    Sample.Measurement
2016-01-01    00:00:00                      3
2016-01-01    00:01:00                      4
2016-01-01    00:02:00                      1
2016-01-01    00:04:00                      4
2016-01-01    00:05:00                      5

Я хочу, чтобы окончательные данные выглядели так:

Date.Local    Time.Local    Sample.Measurement
2016-01-01    00:00:00                      3
2016-01-01    00:01:00                      4
2016-01-01    00:02:00                      1
2016-01-01    00:03:00                    999
2016-01-01    00:04:00                      4
2016-01-01    00:05:00                      5

У меня сложилось впечатление, что упакованный padr хочет столбец datetime POSIXct, поэтому я использую команду

Mendo$Time.Local <- as.POSIXct(paste(Mendo$Date.Local, Mendo$Time.Local), format = '%Y-%m-%d %H:%M')

получить:

Time.Local             Sample.Measurement
2016-01-01 00:00:00                      3
2016-01-01 00:01:00                      4
2016-01-01 00:02:00                      1
2016-01-01 00:04:00                      4
2016-01-01 00:05:00                      5

Теперь я пытаюсь использовать функцию pad, например, в приведенной выше ссылке. Моя строка кода:

Mendo_padded <- Mendo %>% pad

и я получаю ошибку:

Ошибка в if (total_invalid == nrow(x)) {: пропущенное значение там, где требуется TRUE/FALSE. Дополнительно: Предупреждающее сообщение: In if (уникальное (nchar(x_char)) == 10) {: условие имеет длину> 1 и будет использован только первый элемент

Если бы это работало, я бы использовал команду

Mendo_padded %>% fill_by_value(Sample.Measurement, value = 999)

чтобы получить все недостающие часы Sample.Measurement, значение должно быть 999.

Я хотел бы получить отзывы, предложения или комментарии о том, что я могу делать неправильно и как я могу заставить этот код работать! Спасибо!

1 ответ

Решение

Кажется, что pad может автоматически определять, какой столбец имеет тип Date / POSIXct / POSIXlt, поэтому вам не нужно указывать Mendo$Time.Local в pad, Заполнение будет применяться на часовых интервалах.

library(magrittr)
library(padr)

PM10 <- read.csv(file="../Downloads/hourly_81102_2016.csv",
                 stringsAsFactors = FALSE) # don't change the columns to factors
Mendo <- PM10[PM10$County.Name == "Mendocino",]
Mendo$Time.Local <-
  as.POSIXct(paste(
    Mendo$Date.Local, Mendo$Time.Local), format = '%Y-%m-%d %H:%M')
Mendo <- Mendo[,c("Time.Local", "Sample.Measurement")]


# remove Mendo$Time.Local
Mendo_padded <- Mendo %>% na.omit %>%
  pad(interval = 'hour', 
      start_val = NULL, end_val = NULL, group = NULL, 
      break_above = 1)

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

Изменить: как предложено OP, na.omit должны быть использованы до pad чтобы избежать значения NA в столбце Дата.

Другие вопросы по тегам