首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将电影票房转换为数字

将电影票房转换为数字
EN

Stack Overflow用户
提问于 2015-04-24 17:03:37
回答 3查看 80关注 0票数 0

我在R中有一个数据框架,上面列出了1.215亿美元和0.014亿美元的票房,我想把它们转换成直线数字。我正在考虑对$和M横条,然后使用基本乘法。有更好的方法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-24 17:09:38

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

代码语言:javascript
复制
 as.numeric(gsub("[^0-9.]*", '', "$121.5M"))
 #[1] 121.5

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

代码语言:javascript
复制
 as.numeric(gsub("[$M]", '',"$121.5M"))
 #[1] 121.5

更新

如果你有像下面这样的向量

代码语言:javascript
复制
v1 <- c("$1.21M", "$0.5B", "$100K", "$1T", "$0.9P", "$1.5K") 

用数字创建另一个向量,并用相应的缩写设置名称

代码语言:javascript
复制
v2 <- setNames(c(1e3, 1e6, 1e9, 1e12, 1e15), c('K', 'M', 'B', 'T', 'P'))

使用该索引替换缩写,并将其乘以矢量的数字部分。

代码语言:javascript
复制
 as.numeric(gsub("[^0-9.]*", '',v1))* v2[sub('[^A-Z]*', '', v1)]
票数 3
EN

Stack Overflow用户

发布于 2015-04-24 17:54:41

这将移除$,并将KM转换为e3e6。在gsubfn中有一个非常类似的例子。

代码语言:javascript
复制
library(gsubfn)
x <- c("$1.21M", "$100K")  # input

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

如果不需要将as.numeric行转换为数字,则可以省略它。

票数 2
EN

Stack Overflow用户

发布于 2015-04-24 18:08:46

来自extract_numeric包的函数tidyr从字符串中剥离所有非数字字符,并返回一个数字。以你为例:

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29853410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档