2014-09-01 4 views
1

Я пытаюсь извлечь часть фактора в data.frame, который выглядит следующим образом:Извлечение части фактора

aug$V5 <- c("00:00:00","01:01:05","04:32:22") 

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

Результат выглядит следующим образом:

aug$hours <- c("00","01","04") 

Я думаю, что просто нужно использовать суб Functio Но я не уверен.

Спасибо.

ответ

0

lubridate на помощь

> v <- c("00:00:00","01:01:05","04:32:22") 
> library(lubridate) 
> hour(hms(factor(v))) 
[1] 0 1 4 

или просто взять подстроку

> substr(factor(v),1,2) 
[1] "00" "01" "04" 
+0

Ох, очень интересно! – CoryB

+1

Базовые даты через 'as.POSIXlt' =' as.POSIXlt (v, format = "% H:% M:% S") $ hour' – thelatemail

0

Если я создаю простой пример фактор здесь

V5 <- factor(c("00:00:00","01:01:05","04:32:22")) 

затем работает

gsub("^(\\d{2}).*","\\1",as.character(V5)) 

возвращается

[1] "00" "01" "04" 

по желанию.

+0

Отлично, спасибо! – CoryB

+0

Нет необходимости в 'as.character', он будет принудительно –

+0

Я предпочитаю быть явным с факторами. Они могут быть сложными. – MrFlick

1

или с использованием базы R даты манипуляциями

V5 <- factor(c("00:00:00","01:01:05","04:32:22")) 
as.POSIXlt(paste(Sys.Date(), V5))$hour 
## [1] 0 1 4 
0

Другое решение:

V5 <- factor(c("00:00:00","01:01:05","04:32:22")) 

data.frame(strsplit(as.character(V5), ':'))[1,] 
    c..00....00....00.. c..01....01....05.. c..04....32....22.. 
1     00     01     04 

можно просто игнорировать имена выше, или:

setNames(data.frame(strsplit(as.character(V5), ':'))[1,],seq(length(V5))) 
    1 2 3 
1 00 01 04 

Еще лучше было бы следовать, как было предложено @ Ананда Mahto в комментариях ниже:

sapply(strsplit(as.character(V5), ':'), '[[', 1) 
[1] "00" "01" "04" 
+0

Я бы подумал, что 'sapply (strsplit (as.character (V5), ':'), '[[', 1] 'будет более подходящим, чем однострочный' data.frame'. – A5C1D2H2I1M1N2O1R2T1

+0

@ Ананда Махто: Спасибо за подсказку. Я добавил это к ответу. – rnso

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