如何将所有值转换为数据帧中的十亿?

时间:2019-07-15 04:21:53

标签: r data-cleansing

我想将所有值转换为数据框中的十亿,然后计算其平均值。

DF1 <- data.frame("Brand"=c("a","b","c","d","e","f"),"Revenue"=c("$50.21 M","$20.31 B","$50.23 M","$41.45 B","$29.10 M","$32.21 M"))
show(DF1)

temp<-as.numeric(gsub("^[[:punct:]]", "",DF1$Revenue))
temp

temp_num<- as.numeric(as.character(DF1$Revenue))
  

警告信息:强制引入的NAs

2 个答案:

答案 0 :(得分:1)

一种选择是使用parse_number提取数字部分,将后缀“ M”的值除以1000,然后将值转换为billion,然后将'收入”列

mean

答案 1 :(得分:1)

gsub()之后,可以用strsplit()拆分该列。然后,我们可以将一列转换为一个因子,并将"M""B"转换为数字标签。现在我们强制转换为数值,计算乘积,最后可以轻松地计算出平均值除以1e9(使用十亿美元)。

s <- do.call(rbind.data.frame, strsplit(gsub("^[[:punct:]]", "", DF1$Revenue), " "))
s[, 2] <- factor(s[, 2], labels=c("1e9", "1e6"))
res <- mean(apply(s, 1, function(x) prod(as.numeric(as.character(x)))))/1e9
# [1] 10.32029

对于最终输出,我们可以使用formatC

formatC(res, format="f", big.mark=",", digits=2)
# [1] "10.32"