2015-05-20 3 views
2
flight_time 
    11:42:00 
    19:37:06 
    18:11:17 

У меня возникли проблемы с работой с переменной времени в наборе данных. Я не могу понять, как заставить R обрабатывать это значение как числовое.Сокращение времени, прошедшего переменную, в управляемые вещи

Извините, если это было задано ранее.

EDIT:

Хорошо хорошо дали материал размещен ниже, я понял, что есть несколько вещей, которые я не знал/чек раньше.

Прежде всего это факторная переменная. Я прочитал документацию пакета lubridate, и поскольку я хочу выполнять арифметические операции (если это правильная терминология), я считаю, что функция продолжительности является правильной.

Однако, глядя на примеры - я не совсем уверен, что такое синтаксис для применения этого ко всему столбцу в больших (ish) данных. Поскольку у меня есть 4,5 тыс. Наблюдений, я точно не знаю, как это сделать. Мне не нужно чрезмерное количество детализации - в идеале даже часы и минуты в порядке.

Так что я думаю, что я хочу, чтобы мой код выглядит следующим образом:

преобразование из факторного в строку символов> преобразование из строки символов, к продолжительности/as.numeric.

ответ

4

Попробуйте этот код:

#dummy data with factors 
df <- data.frame(flight_time=c("11:42:00","19:37:06","18:11:17")) 

#add Seconds column 
df$Seconds <- 
    sapply(as.character(df$flight_time), function(i) 
    sum(as.numeric(unlist(strsplit(i,":"))) * c(60^2,60,1))) 

#result 
df 
# flight_time Seconds 
# 1 11:42:00 42120 
# 2 19:37:06 70626 
# 3 18:11:17 65477 
+0

Это просто возвращает секунду из 'res' как числовые. Я предполагаю, что @Anaryl хочет, чтобы вся строка была преобразована в числовую. Глядя на 'str (res)', сумма 'res @ hour',' res @ minute' и 'res @ .Data' (секунд), правильно преобразованная в постоянную шкалу, будет делать то, что он хочет. Я не слишком знаком с lubridate, но я не вижу простого способа сделать это в виньетке Хэдли. – iacobus

+0

@iacobus см. Обновление – zx8754

+1

В вашем втором примере это должно быть (1, 1/60, 1/(60 * 60)) или (60, 1, 1/60) или (60 * 60, 60, 1), (60, 60, 60) просто умножает все (часы, минуты и секунды) на 60. Например, 18:11:17 должно быть 65477 с или 1091,28 мин или 18,19 часа. То же самое с множителем 'rowSums'. В противном случае он должен работать. – iacobus

Смежные вопросы