2017-08-01 2 views
2

Il existe un vecteur avec une valeur de temps. Comment puis-je supprimer un deux-points et convertir une valeur de texte en valeur numérique. c'est-à-dire de "10:01:02" - caractère à 100102 - numérique. Tout ce que j'ai pu trouver est présenté ci-dessous.La conversion de l'heure en numéro

> x <- c("10:01:02", "11:01:02") 
> strsplit(x, split = ":") 
[[1]] 
[1] "10" "01" "02" 

[[2]] 
[1] "11" "01" "02" 
+0

Avez-vous pensé à convertir l'heure en POSIXct en utilisant une date fictive. POSIXct est un nombre essentiellement mais fonctionne beaucoup mieux avec des opérations ultérieures comme les différences de temps, ou le traçage. – Uwe

Répondre

3

Nous pouvons utiliser gsub pour remplacer : avec "". Après cela, utilisez as.numeric pour effectuer la conversion.

x <- as.numeric(gsub(":", "", x, fixed = TRUE)) 

Ou nous pouvons utiliser l'expression rationnelle suggère par Soto

x <- as.numeric(gsub('\\D+', '', x)) 
+2

ou 'as.numeric (gsub ('\\ D +', '', x))' – Sotos

+0

@Sotos Merci d'avoir montré la regex. – www

+0

N'hésitez pas à l'inclure dans votre réponse si vous aimez – Sotos

0

Essayez avec

x <- as.numeric(x) 

puis pour vous assurer

class(x) 
+2

Cela conduit à 'NA'. – www

+1

> x <- as.numeric (x) Message d'avertissement: NAs introduites par coercition. Malheureusement, n'a pas fonctionné – Dmitry

5

Si vous voulez faire tout en une seule ligne, vous pouvez utiliser la fonction destring() de taRifx pour enlever tout ce qui est pas un nombre et convertissez le résultat en numérique.

taRifx::destring(x) 

Cela fonctionne aussi si certaines de vos données de format d'une manière différente, comme "10-01-02", si vous avez à définir la valeur de keep.

destring("10-10-10", keep = "0-9") 

Et si vous ne voulez pas avoir à installer le package taRifx vous pouvez définir la fonction destring() localement.

destring <- function(x, keep = "0-9.-") 
{ 
    return(as.numeric(gsub(paste("[^", keep, "]+", sep = ""), 
     "", x))) 
} 
+1

fonction cool/package – Sotos

+0

@Andrew Brēza merci pour la réponse. Mais pour moi, la simplicité de la compréhension et de la réalisation est importante. Votre réponse est difficile pour moi – Dmitry