我想将所有值转换为数据框中的十亿,然后计算其平均值。
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
答案 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"