0

我在 R 中有一个数据框,其中列出的票房号码为 1.215 亿美元和 0.14 万美元,我想将它们转换为直数。我正在考虑剥离 $ 和 M 然后使用基本乘法。有一个更好的方法吗?

4

3 回答 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_numerictidyr字符串中删除所有非数字字符并返回一个数字。用你的例子:

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$转换为Kand 。在 gsubfn 小插图中有一个与此非常相似的示例。Me3e6

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 回答