У меня есть data.frame со следующей структурой

time <- c(0,"start",200,300,"end", 500)
c1 <- c(3.1, "start", 4.5, 4.1, "end", 3.5)
c2 <- c(4.4, "start", 4.5, 4.1, "end", 4.8)
df <- data.frame(time, c1, c2)

Я пытаюсь удалить строки, включая и от 2 до 5. Окончательный data.frame будет таким:

time  c1   c2
0     3.1  4.4
500   3.5  4.8

Строки начала и конца встречаются во всем фрейме данных, и они случайны. Я попробовал функцию сдвига, но пока не повезло.

0
Eser Comak 29 Окт 2020 в 04:34

1 ответ

Лучший ответ

Предполагая, что для каждого «начала» будет «конец», вы можете создать последовательность между этими индексами и удалить их:

start <- which(df$time == 'start')
end <- which(df$time == 'end')
df[-unlist(mapply(`:`, start, end)), ]

#  time  c1  c2
#1    0 3.1 4.4
#6  500 3.5 4.8
1
Ronak Shah 29 Окт 2020 в 01:37