我在 R 中有一个数据框,其中列出的票房号码为 1.215 亿美元和 0.14 万美元,我想将它们转换为直数。我正在考虑剥离 $ 和 M 然后使用基本乘法。有一个更好的方法吗?
问问题
74 次
3 回答
3
您可以通过匹配非数字元素 ( [^0-9.]*
) 并将其替换为''
as.numeric(gsub("[^0-9.]*", '', "$121.5M"))
#[1] 121.5
或者通过专门匹配$
and 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-24T17:09:38.347 回答
2
包中的函数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
于 2015-04-24T18:08:46.050 回答
2
这将删除and$
转换为K
and 。在 gsubfn 小插图中有一个与此非常相似的示例。M
e3
e6
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-24T17:54:41.200 回答