J'ai une colonne avec des tailles de mémoire en Mb et kb. Je veux convertir toutes les valeurs en Mb dans R.
$ Size : Factor w/ 462 levels "","1.0M","1.1M","0.98k"..
J'ai une colonne avec des tailles de mémoire en Mb et kb. Je veux convertir toutes les valeurs en Mb dans R.
$ Size : Factor w/ 462 levels "","1.0M","1.1M","0.98k"..
Cette réponse suppose que vous ne disposez que de kilo-octets et de méga-octets. Voici une solution de base R qui fonctionne :
input <- c("Varies with device", "9.4M", "201k", "0.98k")
output <- sapply(input, function(x) {
ifelse(grepl("k$", x), paste0(0.001*as.numeric(sub("(\\d+(?:\\.\\d+)?)k", "\\1", x)), "M"), x)
})
output
[1] "Varies with device", "9.4M", "0.201M", "0.00098M"
Cette solution utilise grepl
pour trouver toutes les entrées de kilo-octets correspondantes. Pour ces entrées, il extrait la composante numérique, la convertit en numérique, puis la réduit de mille pour la convertir en mégaoctets.
C'est un peu compliqué, mais cela fonctionne. Il devrait également fonctionner si GB ou G apparaît plus tard :
library(tidyverse)
library(stringr)
SampleData <- c("19M", "14M", "24M", "Varies with device", "1.1M", "9.4M", "Varies with device", "201k", "360k")
data <- tibble(strings = SampleData)
data %>%
mutate(number = as.double(str_extract(strings, ".+(?=[:alpha:])")), #extract the numeric portion and make it a double variable
letters = str_extract(strings, "[:alpha:]+"),
number = if_else(letters == "k", number/1000, number),
combined = paste0(number, "M"),
strings = if_else(is.na(number), strings, combined)) %>%
select(strings)
# A tibble: 9 x 1
strings
<chr>
1 19M
2 14M
3 24M
4 Varies with device
5 1.1M
6 9.4M
7 Varies with device
8 0.201k
9 0.36k
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.