2015-06-30 1 views
0

мне интересно, если кто-нибудь может помочь ...Удаление строк данных в R ниже заданного значения

У меня есть кадр данных, который включает в себя непрерывную колонку времени, и я пытаюсь удалить все строки ниже заданного времени ,

Данные начиная с ок. 11:29:00, но я хочу удалить все строки до 12: 30.00 и после 14: 20.00. Поскольку данные записываются каждую секунду, удаление ненужных строк будет большой помощью и упростит управление этими данными для меня, поэтому любая помощь будет принята с большой благодарностью.

Это глава кадра данных, так как вы можете видеть, что время непрерывное в секундах. Я хотел бы удалить все эти строки до 12:30:00 в столбце GPS.Time. Надеюсь, это имеет смысл.

 Raw.Vel.  Smooth.Vel.  GPS.Time 

     1.486    0.755   11:39:39 
     1.425    1.167   11:39:40 
     1.466    1.398   11:39:41 
     1.533    1.552   11:39:42 
     1.517    1.594   11:39:43 
     1.918    1.556   11:39:44 

Создание выше кадра данных:

Raw.Vel. <- c(1.486,1.425, 1.466, 1.533, 1.517, 1.918) 
Smooth.Vel. <- c(0.755, 1.167, 1.398, 1.552, 1.594, 1.556) 
GPS.Time <- c("11:39:39", "11:39:40", "11:39:41", "11:39:42", "11:39:43", "11:39:44") 
sample <- data.frame(Raw.Vel., Smooth.Vel., GPS.Time) 

Спасибо заранее.

+3

Пожалуйста, добавьте некоторые выборочные данные так что мы лучше понимаем ваши потребности и вопрос более воспроизводим. –

+0

Вы можете начать с простых примеров, таких как 'DF <- data.frame (x = 1: 5); DF [DF $ x> 2 & DF $ x <5,] 'и команда' subset' – Frank

+1

«Воспроизводимые» означает, что данные могут быть скопированы с вашего ответа (не из комментария) в R, так что мы глядя на те же данные, что и вы. Полезная ссылка: http://stackoverflow.com/a/28481250/1191259 – Frank

ответ

0

Используйте lubridate пакет для преобразования вашего столбца строки времени в какой-то от времени:

library(lubridate) 
sample$GPS.Time <- hms(sample$GPS.Time) 

Для достижения требуемого результата просто используйте s ubsetting с кронштейнами ([), с условием, которое вы хотите. В вашем примере я удалил все строки до 11:39:42.

output <- sample[sample$GPS.Time < hms("11:39:42"),] 
+0

Спасибо, это сработало на моем наборе данных. Хотя мне пришлось использовать> = вместо <, чтобы получить желаемый результат хранения данных выше 12:30:00. – Student

0

Включите GPS.Time в «POSIXct» объект:

df$time <- as.POSIXct(df$GPS.Time, format="%H:%M:%S") 

Затем можно отфильтровать с помощью логики:

filtered_df <- df[df$time < as.POSIXct("12:30:00", format="%H:%M:%S"), ] 
0

Вы можете преобразовать записи в столбцы «GPS.Time» в символы (это изначально факторная переменная). После этого вы можете отделить установить путем сравнения времени с заданной отсечки времени хранится как строка символов, которая должна быть записана в том же формате (HH: MM: SS):

sample$GPS.Time <- as.character(sample$GPS.Time) 
cutoff_time <- "11:39:42" # modify as necessary 
sample <- sample[-which(sample$GPS.Time < cutoff_time),] #remove all rows with times smaller than the cutoff_time 
#> sample 
# Raw.Vel. Smooth.Vel. GPS.Time 
#4 1.533  1.552 11:39:42 
#5 1.517  1.594 11:39:43 
#6 1.918  1.556 11:39:44 
Смежные вопросы