2013-05-08 3 views
10

У меня есть данные в форматеокругление раз до ближайшего часа в R

time <- c("16:53", "10:57", "11:58") 

и т.д.

Я хотел бы создать новый столбец, где каждый из этих времен округляется до ближайшего часа. Кажется, я не могу заставить команду POSIX работать для меня.

as.character (формат (data2 $ время, "% H:% M"))

Ошибка в format.default (структура (as.character (х), имена = имена (х), тусклые = тусклые (х),:.? недействительно «подрезать» аргумент

говоря уже использовать круглую команду Может кто-нибудь посоветовать

+1

'format' используется для перехода в другой стороне (от даты-времени до определенного представления). t обязательно, если есть класс для частичного дате-времени, например, только состоящий из часов и минут. – Frank

+1

http://stackoverflow.com/questions/16041093/round-a-posix-date-and-time-posixct-to-a-date-relative-to-a-timezone –

+0

Что-то вроде: 'as.POSIXlt (strptime (tt, format = "% H:% M") + 30 * 60) $ hour' ?? – Arun

ответ

13
## Example times 
x <- c("16:53", "10:57", "11:58") 

## POSIX*t objects need both date and time specified 
## Here, the particular date doesn't matter -- just that there is one. 
tt <- strptime(paste("2001-01-01", x), format="%Y-%m-%d %H:%M") 

## Use round.Date to round, then format to format 
format(round(tt, units="hours"), format="%H:%M") 
# [1] "17:00" "11:00" "12:00" 
+0

вам действительно не нужно добавлять дату, текущая дата будет добавлена ​​автоматически, если вы выполните 'strptime (x,"% H:% M ")' – eddi

+2

@eddi - круто, но любой шанс, который мог бы получить вас проблема для определенных времен в дни с переходом на летнее время? (Я * сказал * день не имел значения, но по этой причине выбрал тот, для которого я не думаю, что в каком-либо месте есть сдвиг DLT ...) –

+0

Не могу понять, почему это было бы - и я просто проверил он и работает нормально, насколько я могу судить. – eddi

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