R 将电影票房转换为数字

R 将电影票房转换为数字,r,movies,R,Movies,我有一个R格式的数据框,上面列出的票房分别是1.215亿美元和0.014亿美元,我想把它们转换成直接数字。我想把$m分条,然后使用基本乘法。有更好的方法吗 您可以通过匹配非数字元素([^0-9.]*)并将其替换为' 或者专门匹配$和M([$M])并将其替换为' 更新 如果你有一个像下面这样的向量 v1 <- c("$1.21M", "$0.5B", "$100K", "$1T", "$0.9P", "$1.5K") 这将删除$,并将K和M转换为e3和e6。gsubfn小插曲中有一个非常

我有一个R格式的数据框,上面列出的票房分别是1.215亿美元和0.014亿美元,我想把它们转换成直接数字。我想把$m分条,然后使用基本乘法。有更好的方法吗

您可以通过匹配非数字元素(
[^0-9.]*
)并将其替换为
'

或者专门匹配
$
M
[$M]
)并将其替换为
'

更新 如果你有一个像下面这样的向量

v1 <- c("$1.21M", "$0.5B", "$100K", "$1T", "$0.9P", "$1.5K") 

这将删除
$
,并将
K
M
转换为
e3
e6
。gsubfn小插曲中有一个非常类似的例子

library(gsubfn)
x <- c("$1.21M", "$100K")  # input

ch <- gsubfn("[KM$]", list(K = "e3", M = "e6", "$" = ""), x)
as.numeric(ch)
## [1] 1210000  100000
库(gsubfn)

x函数
extract_numeric
tidyr
包中取出字符串中的所有非数字字符并返回一个数字。以你的例子:

library(tidyr)
dat <- data.frame(revenue = c("$121.5M", "$0.014M"))
dat$revenue2 <- extract_numeric(dat$revenue)*1000000

dat
  revenue  revenue2
1 $121.5M 121500000
2 $0.014M     14000
library(tidyr)
dat
v2 <- setNames(c(1e3, 1e6, 1e9, 1e12, 1e15), c('K', 'M', 'B', 'T', 'P'))
 as.numeric(gsub("[^0-9.]*", '',v1))* v2[sub('[^A-Z]*', '', v1)]
library(gsubfn)
x <- c("$1.21M", "$100K")  # input

ch <- gsubfn("[KM$]", list(K = "e3", M = "e6", "$" = ""), x)
as.numeric(ch)
## [1] 1210000  100000
library(tidyr)
dat <- data.frame(revenue = c("$121.5M", "$0.014M"))
dat$revenue2 <- extract_numeric(dat$revenue)*1000000

dat
  revenue  revenue2
1 $121.5M 121500000
2 $0.014M     14000