2017-01-30 8 views
1

У меня есть столбец в R на моем наборе данных со значениями, которые были преобразованы в то, что я считаю временной декальной дроби, основанной на днях. Я использую этот сайт в качестве справки: http://www.calculatorsoup.com/calculators/time/decimal-to-time-calculator.phpПреобразование временной десятичной/дробной части, представляющей дни до фактического времени в R?

Каких преобразований 0.3408565 дней соответствует времени 8:10:50, выполнив следующие действия:

0.3408565 * 24 hours/day = 8.180555544 = 8 hours 

0.180555544 * 60 minutes = 10.83333264 = 10 minutes 

0.83333264 * 60 seconds = 49.9999584 = 50 seconds 

Как вы можете увидеть его извлечение остальное и делать дальнейшее умножение, однако я не уверен, как я мог реализовать процесс внутри R. Я хочу преобразовать все значения в моем столбце, используя это, чтобы я мог заменить 0.3408565, 0.3864468, 0.4400231 и т. д. с их фактическими сопоставлениями времени 8 : 10: 50, 09:16:29, 10:33:38 соответственно. Похоже, что это делается и в Excel.

Я пытался писать свою собственную функцию, которая на английском языке делает:

convertTime <- function(x) 
{ 
x * 60 = Hour 
x2 * 24 = Min 
x3 * 24 = Sec 

hourChar <- as.character(Hour) 
minChar <- as.character(Min) 
secChar <- as.character(Sec) 
paste(hourChar, minChar, secChar, sep=":") 
} 

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

Наконец, я просмотрел такие пакеты, как «lubridate», но не могу найти ничего, что имеет отношение к моей проблеме.

Я также просмотрел здесь свою конкретную ситуацию, но не смог найти что-либо действительно актуальное для моей проблемы. Есть ли какой-нибудь пакет или решение, которое могло бы мне помочь?

EDIT: Я хочу сказать, что оба ответа отлично работают для всех, у кого есть такая проблема, спасибо вам обоим!

ответ

0

Вот пользовательская функция

convertTime <- function(x){ 
    Hour = (x * 24) %% 24 #For x>1, only the value after decimal will be considered 
    Minutes = (Hour %% 1) * 60 
    Seconds = (Minutes %% 1) * 60 

    hrs = ifelse (Hour < 10, paste("0",floor(Hour),sep = ""), as.character(floor(Hour))) 
    mins = ifelse (Minutes < 10, paste("0",floor(Minutes),sep = ""), as.character(floor(Minutes)))  
    secs = ifelse (Seconds < 10, paste("0",round(Seconds,0),sep = ""), as.character(round(Seconds,0))) 

    return(paste(hrs, mins, secs, sep = ":")) 
} 

ИСПОЛЬЗОВАНИЕ

a = seq(0,1,0.2) 
convertTime(a) 
#[1] "00:00:00" "04:48:00" "09:36:00" "14:24:00" "19:12:00" "00:00:00" 

b = 0.3408565 
convertTime(b) 
# [1] "08:10:50" 
+0

Я только что попробовал это решение, и он отлично работает для моей ситуации, спасибо вам столько! Если бы вы знали, как можно изменить дату, не задав еще вопрос? Снова у меня есть дата (41641), которую я могу конвертировать до 02/01/2014, что, я думаю, 41641 - это количество дней с 01.01.1900? – IAmZingy

+0

'as.Date (41641, origin =" 1900-01-01 ")' –

+1

Это идеальное спасибо за вашу помощь, мне просто нужно преобразовать его в британское время, которое я выясню, как это сделать! Еще раз спасибо вам большое! – IAmZingy

1

Try times в Хронах, который представляет время как доли дня:

library(chron) 
format(times(0.3408565)) 
## [1] "08:10:50" 

Если у вас есть что-то вроде й = 3.3408565 дней, то это может быть отформатирован следующим образом:

x <- 3.3408565 
paste(x %/% 1, times(x %% 1)) 
## [1] "3 08:10:50" 

Что касается предмета вопроса не ясно, что такое «фактическое время в R» означает, но временные интервалы могут быть выражены как "difftime" объектов, так что если вы хотите, чтобы преобразовать x к "difftime" класса R объекта, то:

as.difftime(x, units = "days") 
## Time difference of 3.340857 days 

или если вы хотите, чтобы вычесть x от текущей даты/времени:

Sys.time() - as.difftime(x, units = "days") 
## [1] "2017-01-27 05:00:22 EST" 

Существует также некоторая информация, которая может иметь значение в столбце R Help Desk из R News 4/1, включая информацию о преобразовании даты/времени Excel в R - https://www.r-project.org/doc/Rnews/Rnews_2004-1.pdf

+0

Я также только что попробовал этот метод и снова она прекрасно работает для моей ситуации, спасибо очень много! – IAmZingy

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

  • Нет связанных вопросов^_^