2 votes

Comment convertir une colonne ayant une taille de mémoire Ex. MB & KB et je veux toutes les valeurs en MB ?

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"..

1voto

Tim Biegeleisen Points 53335

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.

0voto

Ben G Points 705

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.com

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.

Powered by:

X