Изменение значений в числовые значения - PullRequest
1 голос
/ 24 июня 2019

У меня есть несколько столбцов, где значение, например: 525K или 1.1M.Я хочу преобразовать эти значения в тысячи или миллионы в виде чисел, не используя дополнительный пакет R, кроме baser и tidyr.

enter image description here

Кто-нибудь может помочь мне с кодом или функцией, как я могу сделать это простым и быстрым способом?

Я пыталсясделайте это вручную, удалив «М» или «К» и «.».

players_set$Value <- gsub(pattern = "M", replacement = "000000 ", 
                           x = players_set$Value, fixed = TRUE)

Ответы [ 2 ]

3 голосов
/ 24 июня 2019

Для базовой опции R мы можем попытаться использовать sub для генерации арифметического выражения на основе единицы K или M.Затем используйте eval с parse, чтобы получить окончательное число:

getValue <- function(input) {
    output <- sub("M", "*1000000", sub("K", "*1000", input))
    eval(parse(text=output))
}

getValue("525K")
getValue("1.1M")

[1] 525000
[1] 1100000
2 голосов
/ 24 июня 2019

Вот еще один вариант с совпадением именованного вектора

getValue <- function(input) {
    # remove characters except LETTERS 
    v1 <- gsub("[0-9.€]+", "", input)
    # remove characters except digits
    v2 <- gsub("[A-Za-z€]+", "", input)
    # create a named vector
    keyval <- setNames(c(1e6, 1e3), c("M", "K"))
    # match the LETTERS (v1) with the keyval to get the numeric value
    # multiply with v2
    unname(as.numeric(v2) *keyval[v1])
}



getValue("525K")
#[1] 525000
getValue("1.1M")
#[1] 1100000

getValue("€525K")
#[1] 525000

getValue("€1.1M")
#[1] 1100000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...