Вы можете извлечь букву и использовать switch()
, что легко поддерживается, если вы хотите добавить дополнительные символы, это очень просто.
Во-первых, настройки:
options(scipen = 999) # to prevent R from printing scientific numbers
library(stringr) # to extract letters
Это пример вектора:
numbers_with_letters <- c("1.00M", "8.6k", 50)
Используйте lapply()
, чтобы перебрать вектор, извлечь букву, заменить ее на число, удалить букву, преобразовать в числовое значение и умножить:
lapply(numbers_with_letters, function(x) {
letter <- str_extract(x, "[A-Za-z]")
letter_to_num <- switch(letter,
k = 1000,
M = 1000000,
1) # 1 is the default option if no letter found
numbers_with_letters <- as.numeric(gsub("[A-Za-z]", "", x))
#remove all NAs and replace with 0
numbers_with_letters[is.na(numbers_with_letters)] <- 0
return(numbers_with_letters * letter_to_num)
})
Возвращает:
[[1]]
[1] 1000000
[[2]]
[1] 8600
[[3]]
[1] 50
[[4]]
[1] 0