2013-05-15 3 views
0

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

Чтобы быть точным, данные в следующем формате: 162: 43: 33.281 HHH: MM: ss.msecs в то начало точек данных эксперимента может состоять всего из 1-2 значений для часового вложения 3 упомянутых здесь.

Когда я пытаюсь вычитать 2 раза, я получаю сообщение о том, что числовое выражение имеет пример 162: 43 элементов, что, очевидно, относится к двоеточию, используемому во временной аннотации.

Любые идеи о том, как обрабатывать переменные времени, которые состоят из часовых значений более 24? Я попробовал функцию strptime,% H в качестве аргумента, но это ограничивает меня до 24 часов.

Вот несколько примеров данных:

V1   V2 V3  V4      V5    
75:45:32.487 NA 17  ####revFalsePoke is 112 TRUE 
75:45:32.487 NA 17   ####totalwindow is 5 TRUE 
75:46:32.713 NA 1   ####Criteria not met TRUE 
75:46:49.846 NA 6  ####revCorrectPoke is 37 TRUE 
75:46:52.336 NA 9 ####revDeliberateLick is 34 TRUE 
75:46:52.351 NA 9   ####totalwindow is 5 TRUE 
75:46:52.598 NA 1   ####Criteria not met TRUE 
75:47:21.332 NA 6  ####revCorrectPoke is 38 TRUE 
75:47:23.440 NA 9 ####revDeliberateLick is 35 TRUE 
75:47:23.455 NA 9   ####totalwindow is 6 TRUE 
75:47:23.657 NA 1  ####rev Criteria not met TRUE 
75:47:44.731 NA 17  ####revFalsePoke is 113 TRUE 
75:47:44.731 NA 17   ####totalwindow is 6 TRUE 
+0

Вы должны использовать что-то вроде 'strsplit' и целочисленной математики. Я ответил на аналогичный вопрос в прошлом, но не могу найти его сейчас. – Justin

+0

Соответствующая целочисленная математика, вероятно, '%%' и '% /%'. Используйте 'help (" %% ")' для деталей. Я не совсем понимаю, в чем заключается ваш вопрос. – Frank

+0

Matthew: Я пробовал ваш код, однако при попытке запустить функцию по своим собственным данным я получаю следующее сообщение: Ошибка в strsplit (timesteps, ":"): несимвольный аргумент. Я думаю, что это связано с тем, что мои данные не были в векторе, а в кадре данных. Я попытался сделать следующее: timesteps <- c (x $ V1), чтобы получить мои данные, которые находятся в dataframe x; переменная v1 в вектор. К сожалению, я все равно получаю такое же сообщение об ошибке. Фрэнк: Мой вопрос заключается в том, как я должен был обрабатывать свой формат данных, чтобы я мог выполнять с ним основные операции (- и +) – user2385985

ответ

1

К сожалению, вы собираетесь придется свернуть свою собственную функцию преобразователя для этого. Я предлагаю преобразовать метки времени в difftime объектов (которые представляют продолжительность времени, а не местоположение). Затем вы можете добавить их к некоторому стартовому дату времени, чтобы прийти к окончательному дате времени для каждой отметки времени. Вот один из подходов:

f <- function(start, timestep) { 
    result <- mapply(function(part, units) as.difftime(as.numeric(part), units=units), 
        unlist(strsplit(timestep, ':')), 
        c('hours', 'mins', 'secs'), 
        SIMPLIFY=FALSE) 
    start + do.call(sum, result) 
} 

start <- as.POSIXct('2013-1-1') 
timesteps <- c('162:43:33.281', '172:34:28.33') 
lapply(timesteps, f, start=start) 
# [[1]] 
# [1] "2013-01-07 18:43:33.280 EST" 
# 
# [[2]] 
# [1] "2013-01-08 04:34:28.32 EST" 
+0

Мэтью, я пробовал следующее:> test <-as.vector (x ['V1']) ### данные времени находятся в переменной данных x1 V1 > f <- function (start, timestep) { + результат <- mapply (функция (часть, единицы) as.difftime (as.numeric (часть), единицы = единицы измерения), + unlist (strsplit (timestep, ':')), + c ('часы', 'mins', 'secs'), + SIMPLIFY = FALSE) + start + do.call (сумма, результат) +} > старт <- as.POSIXct ('2013-1-1') > > lapply (тест, е, начало = пуск) $ V1 [1] " 2114-12-09 08: 56: 1 3 PST "### - это то, что я получаю как результат, это похоже на сумму времени. – user2385985

+0

Просьба предоставить некоторые выборочные данные в вашем вопросе. –

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