将值更改为数值

时间:2019-06-24 15:27:22

标签: r

我有几列,例如:525K或1.1M。我想将这些值转换为数以千计或数百万的数字,而不使用除baser和tidyr之外的额外R包。

enter image description here

有没有人可以帮助我编写代码或函数,如何以一种简单快捷的方式做到这一点?

我尝试手动删除“ M”或“ K”和“。”。

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

2 个答案:

答案 0 :(得分:3)

对于基本R选项,我们可以尝试基于subK单位使用M生成算术表达式。然后,将evalparse一起使用以获取最终号码:

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

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

[1] 525000
[1] 1100000

答案 1 :(得分:2)

这是另一个匹配命名向量的选项

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