Вставка строки в недостающие почасовые данные в 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 в столбце Дата.