我有几列,例如:525K或1.1M。我想将这些值转换为数以千计或数百万的数字,而不使用除baser和tidyr之外的额外R包。
有没有人可以帮助我编写代码或函数,如何以一种简单快捷的方式做到这一点?
我尝试手动删除“ M”或“ K”和“。”。
players_set$Value <- gsub(pattern = "M", replacement = "000000 ",
x = players_set$Value, fixed = TRUE)
答案 0 :(得分:3)
对于基本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
答案 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