Как извлечь данные временного интервала из минутных данных в r

Я пытаюсь извлекать строки с 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-минутными интервалами:

Как извлечь данные временного интервала из минутных данных в r

Не могли бы вы добавить больше данных в свой пример?

nghauran 18.12.2018 14:28

Итак, вам нужны строки, значение Time которых находится на отметке 5 минут?

IceCreamToucan 18.12.2018 14:29

Добро пожаловать в SO! Не могли бы вы обеспечить желаемый результат?

s__ 18.12.2018 14:29

Возможный дубликат Выбрать каждую n-ю строку из фрейма данных, поскольку вы знаете, что каждая строка разделена 1 мин.

7hibault 18.12.2018 14:33

Я не просматривал каждую n-ю строку, так как некоторые данные отсутствуют

EJG_27 18.12.2018 14:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
409
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете извлекать строки с минутной меткой, заканчивающейся на 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?

EJG_27 18.12.2018 14:44

Да, он просто проверяет, является ли минута целым числом, кратным 5, то есть деленная на 5 минутная метка имеет остаток 0. Я также добавил опцию substr для фильтрации, но они дают тот же результат.

IceCreamToucan 18.12.2018 14:51

Спасибо. Я пробовал код, и он работает. Я также искал помощь в создании интервалов, если в начале отсутствуют строки, т.е. если 14:30 нет, начиная с 14:29

EJG_27 18.12.2018 14:55

Вам придется добавить к своему вопросу дополнительные сведения, описывающие, что вы хотите сделать в этих случаях, потому что это не на 100% ясно. Выбрать следующий? Предыдущий? Что делать, если пропавших без вести> 1? Что делать, если одна строка является ближайшим непропущенным значением времени для двух разных 5-минутных маркеров, следует ли использовать ее дважды? и так далее.

IceCreamToucan 18.12.2018 14:56

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