Как удалить строки на основе временного диапазона в R? - PullRequest
0 голосов
/ 07 мая 2019

У меня есть датафрейм, который выглядит так:

  TIME   | VALVE
10:06:05 |  2
10:06:06 |  2
10:06:07 |  2
10:06:08 |  2
10:06:09 |  2
10:06:10 |  3
10:06:11 |  3
10:06:12 |  3
10:06:13 |  3
10:06:14 |  4
10:06:15 |  4
10:06:16 |  4
10:06:17 |  2
10:06:18 |  2
10:06:19 |  2

Я хочу удалять первые 2 секунды каждой строки каждый раз, когда изменяется значение VALVE, но я понятия не имею, как это сделать.

Ответы [ 2 ]

2 голосов
/ 07 мая 2019

следующее должно работать

library(data.table)

dt <- as.data.table(your_data)

fun <- function(x) {
    # function to remove the first two rows
    y <- copy(x)
    y <- y[-c(1, 2)]
    return(y)
}

new_dt <- dt[, fun(.SD), by = .(rleid(VALVE))]
1 голос
/ 07 мая 2019

На основании представленных данных мы можем предположить, что вы читаете каждую секунду. Мы можем использовать rleid из data.table для создания групп и удаления первых двух строк из каждой группы.

library(dplyr)
library(data.table)

df %>%
  group_by(group = rleid(VALVE)) %>%
  slice(-c(1, 2)) %>%
  ungroup() %>%
  select(-group)


# A tibble: 7 x 2
#    TIME  VALVE
#    <chr> <chr>
#1  10:06:07 2    
#2  10:06:08 2    
#3  10:06:09 2    
#4  10:06:12 3    
#5  10:06:13 3    
#6  10:06:16 4    
#7  10:06:19 2    

данные

df <- structure(list(TIME = c("10:06:05", "10:06:06", "10:06:07", 
"10:06:08", "10:06:09", "10:06:10", "10:06:11", "10:06:12", "10:06:13", 
"10:06:14", "10:06:15", "10:06:16", "10:06:17", "10:06:18", 
"10:06:19"), VALVE = c("2", "2", "2", "2", "2", "3", "3", "3", "3", 
"4", "4", "4", "2", "2", "2")), row.names = c(NA, -15L), class = 
"data.frame")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...