Я пытаюсь извлекать строки с 5-минутными интервалами из 1-минутных данных. Мои данные выглядят так:
structure(list(Date = structure(c(1509408000, 1509408000, 1509408000,
1509408000, 1509408000, 1509408000), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), Time = structure(c(-2209021500, -2209021560,
-2209021620, -2209021680, -2209021740, -2209021800), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), O = c(3674, 3675, 3674, 3675, 3675,
3675), H = c(3674, 3675, 3675, 3676, 3676, 3675), L = c(3673,
3674, 3674, 3674, 3675, 3675), C = c(3673, 3674, 3674, 3675,
3675, 3675)), row.names = c(NA, -6L), class = c("tbl_df", "tbl",
"data.frame"))
structure(list(Date = structure(c(1506902400, 1506902400, 1506902400,
1506902400, 1506902400, 1506902400), class = c("POSIXct", "POSIXt"
), tzone = "UTC"), Time = structure(c(-2209071300, -2209071360,
-2209071420, -2209071480, -2209071540, -2209071600), class = c("POSIXct",
"POSIXt"), tzone = "UTC"), O = c(3450, 3451, 3451, 3452, 3450,
3449), H = c(3451, 3451, 3451, 3452, 3452, 3451), L = c(3448,
3449, 3449, 3450, 3450, 3449), C = c(3448, 3451, 3450, 3451,
3452, 3450)), row.names = c(NA, -6L), class = c("tbl_df", "tbl",
"data.frame"))
Я посмотрел:
Создать временной интервал в 15 минут из поминутных данных в R?
Как подмножество и извлечение временных рядов по временному интервалу в строке
но никто не делает именно то, что я хочу. Может быть, я мог бы использовать это:
substr(t,15,16)= = "00"
.
но я не уверен, как это совместить с filter
.
Желаемый результат: найдите строки с 30-минутными интервалами:
Итак, вам нужны строки, значение Time
которых находится на отметке 5 минут?
Добро пожаловать в SO! Не могли бы вы обеспечить желаемый результат?
Возможный дубликат Выбрать каждую n-ю строку из фрейма данных, поскольку вы знаете, что каждая строка разделена 1 мин.
Я не просматривал каждую n-ю строку, так как некоторые данные отсутствуют
Вы можете извлекать строки с минутной меткой, заканчивающейся на 0 или 5, с помощью
df[substr(format(df$Time, '%M'), 2, 2) %in% c(0, 5),]
# or
df[as.numeric(format(df$Time, '%M')) %% 5 == 0,]
# or
df[grep('[0|5]$', format(df$Time, '%M')),]
С filter
:
library(dplyr)
df %>%
filter(substr(format(df$Time, '%M'), 2, 2) %in% c(0, 5))
# or
df %>%
filter(as.numeric(format(df$Time, '%M')) %% 5 == 0)
Будет ли в примере с фильтром отображаться минутная метка, оканчивающаяся на 0 или 5?
Да, он просто проверяет, является ли минута целым числом, кратным 5
, то есть деленная на 5 минутная метка имеет остаток 0. Я также добавил опцию substr для фильтрации, но они дают тот же результат.
Спасибо. Я пробовал код, и он работает. Я также искал помощь в создании интервалов, если в начале отсутствуют строки, т.е. если 14:30 нет, начиная с 14:29
Вам придется добавить к своему вопросу дополнительные сведения, описывающие, что вы хотите сделать в этих случаях, потому что это не на 100% ясно. Выбрать следующий? Предыдущий? Что делать, если пропавших без вести> 1? Что делать, если одна строка является ближайшим непропущенным значением времени для двух разных 5-минутных маркеров, следует ли использовать ее дважды? и так далее.
Не могли бы вы добавить больше данных в свой пример?