从 CSV 解析货币值,将数字后缀转换为 Million 和 Billion
Parse currency values from CSV, convert numerical suffixes for Million and Billion
我很好奇 R 中是否有任何开箱即用的函数可以处理这个问题。
我有一个 CSV 文件,我正在使用 read.csv 将其读入数据框。 CSV 中的一列包含
格式的货币值
Currency
--------
.2M
.1B
N/A
我想将它们转换成更有用的数字,以便进行计算,所以它看起来像这样:
Currency
----------
1200000
3100000000
NA
我最初的想法是以某种方式根据包含 *M、*B 或 N/A 的行将数据框分为 3 个部分。然后用gsub替换$和M/B,然后将剩余的数乘以1000000或1000000000,最后将3个子集重新拼接回1个数据框。
但是我很好奇在 R 中是否有更简单的方法来处理这种转换。
我们可以使用gsubfn
将'B'、'M'替换为'e+9'、'e+6'并转换为numeric
(as.numeric
).
is.na(v1) <- v1=='N/A'
options(scipen=999)
library(gsubfn)
as.numeric(gsubfn('([A-Z]|\$)', list(B='e+9', M='e+6',"$"=""),v1))
#[1] 1200000 3100000000 NA
编辑:根据@nicola 的建议修改
数据
v1 <- c('.2M', '.1B', 'N/A')
另一种方法是使用 for-loop
:
x <- c("1.2M", "2.5M", "1.6B", "N/A")
x <- ifelse(x=="N/A", NA, x)
num <- as.numeric(strsplit(x, "[^0-9.]+"))
for(i in 1:length(x)) {
if(grepl('M', x[i]))
print(prod(num[i], 1000000))
else
print(prod(num[i], 100000000))
}
# [1] 1200000
# [1] 2500000
# [1] 1.6e+08
# [1] NA
我很好奇 R 中是否有任何开箱即用的函数可以处理这个问题。
我有一个 CSV 文件,我正在使用 read.csv 将其读入数据框。 CSV 中的一列包含
格式的货币值Currency
--------
.2M
.1B
N/A
我想将它们转换成更有用的数字,以便进行计算,所以它看起来像这样:
Currency
----------
1200000
3100000000
NA
我最初的想法是以某种方式根据包含 *M、*B 或 N/A 的行将数据框分为 3 个部分。然后用gsub替换$和M/B,然后将剩余的数乘以1000000或1000000000,最后将3个子集重新拼接回1个数据框。
但是我很好奇在 R 中是否有更简单的方法来处理这种转换。
我们可以使用gsubfn
将'B'、'M'替换为'e+9'、'e+6'并转换为numeric
(as.numeric
).
is.na(v1) <- v1=='N/A'
options(scipen=999)
library(gsubfn)
as.numeric(gsubfn('([A-Z]|\$)', list(B='e+9', M='e+6',"$"=""),v1))
#[1] 1200000 3100000000 NA
编辑:根据@nicola 的建议修改
数据
v1 <- c('.2M', '.1B', 'N/A')
另一种方法是使用 for-loop
:
x <- c("1.2M", "2.5M", "1.6B", "N/A")
x <- ifelse(x=="N/A", NA, x)
num <- as.numeric(strsplit(x, "[^0-9.]+"))
for(i in 1:length(x)) {
if(grepl('M', x[i]))
print(prod(num[i], 1000000))
else
print(prod(num[i], 100000000))
}
# [1] 1200000
# [1] 2500000
# [1] 1.6e+08
# [1] NA