2015-03-29 2 views
0

У меня есть приведенный ниже набор данных от excel, и цифры указывают часы, как я могу преобразовать это в гибкий набор данных, где я могу организовать (заказать) свой набор данных так, как я хочу.Время сортировки (часы) в R

Я пробовал что-то ниже, используя lubridate, но это не позволяет мне размещать desc или asc.

Category Time1 Time2 
1  A 0:30:00 24:00:00 
2  B 1:00:00 23:23:00 
3  C 2:30:00 23:00:59 
4  D 3:00:00 45:00:00 

> dput(t1) 
structure(list(Category = c("A", "B", "C", "D"), Time1 = c("0:30:00", 
"1:00:00", "2:30:00", "3:00:00"), Time2 = c("24:00:00", "23:23:00", 
"23:00:59", "45:00:00"), hr1 = structure(c(0, 0, 0, 0), year = c(0, 
0, 0, 0), month = c(0, 0, 0, 0), day = c(0, 0, 0, 0), hour = c(0, 
1, 2, 3), minute = c(30, 0, 30, 0), class = structure("Period", package = "lubridate")), 
    hr2 = structure(c(0, 0, 59, 0), year = c(0, 0, 0, 0), month = c(0, 
    0, 0, 0), day = c(0, 0, 0, 0), hour = c(24, 23, 23, 45), minute = c(0, 
    23, 0, 0), class = structure("Period", package = "lubridate"))), .Names = c("Category", 
"Time1", "Time2", "hr1", "hr2"), row.names = c(NA, -4L), class = "data.frame") 

RCODE

t1<-read.csv("time1.csv", header=TRUE, sep=",",stringsAsFactors=FALSE) 
library(lubridate) 
t1$hr1<-hms(t1$Time1) 
t1$hr2<-hms(t1$Time2) 

Выход

Category Time1 Time2  hr1  hr2 
1  A 0:30:00 24:00:00 30M 0S 24H 0M 0S 
2  B 1:00:00 23:23:00 1H 0M 0S 23H 23M 0S 
3  C 2:30:00 23:00:59 2H 30M 0S 23H 0M 59S 
4  D 3:00:00 45:00:00 3H 0M 0S 45H 0M 0S 
+0

Что означает 'Time1' и' Time2'? Как у вас есть 45 часов? –

+0

'Time1' и 'Time2' - это просто некоторая случайная величина в течение часов, 45 - это число часов, а не точное время, я думаю, что мне нужно изменить имя столбца. – Shoaibkhanz

ответ

0

Это? Difftime функция, которую вы ищете. Но так как вы закодировали часы больше 24, это не сработает.

Грязный обходной путь, чтобы закодировать все в считанные секунды, и идти оттуда:

Функция для преобразования вектора часов [1], мин [2], секунды [3] символьные все до нескольких секунд:

convS<-function(x) { 
    x<-as.numeric(x) 
    seconds<-c(3600,60,1) 
    x<-x*seconds 
    sum(x) 
    } 

применять эту функцию для расщепленных векторов вашего персонажа с временными переменными 2 и положить выход в двух новых переменных с истекшим временем в секундах:

t1$Time1Secs<-unlist(lapply(strsplit(t1$Time1,":"),convS)) 
t1$Time2Secs<-unlist(lapply(strsplit(t1$Time2,":"),convS)) 

Так что теперь у вас есть цифровые переменные с разницей времени в секундах, чтобы заказать ваш набор данных в любом случае.

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