我在R中有一个数据框架,上面列出了1.215亿美元和0.014亿美元的票房,我想把它们转换成直线数字。我正在考虑对$和M横条,然后使用基本乘法。有更好的方法吗?
发布于 2015-04-24 17:09:38
您可以通过匹配非数字元素([^0-9.]*)并将其替换为''来做到这一点。
as.numeric(gsub("[^0-9.]*", '', "$121.5M"))
#[1] 121.5或者专门匹配$和M ([$M]),并将其替换为''
as.numeric(gsub("[$M]", '',"$121.5M"))
#[1] 121.5更新
如果你有像下面这样的向量
v1 <- c("$1.21M", "$0.5B", "$100K", "$1T", "$0.9P", "$1.5K") 用数字创建另一个向量,并用相应的缩写设置名称
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)]发布于 2015-04-24 17:54:41
这将移除$,并将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如果不需要将as.numeric行转换为数字,则可以省略它。
发布于 2015-04-24 18:08:46
来自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 14000https://stackoverflow.com/questions/29853410
复制相似问题