将美元数据从字符转换为数字

时间:2015-09-21 17:06:56

标签: r

如何更改字符数据的列格式为" 33美元14美分"格式化为" 33.14"?

的数字数据

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

您可以使用sub

x <- "33 dollars 14 cents" 
as.numeric(sub("^(\\d+)\\s+dollars\\s+(\\d+)\\s+cents$", "\\1.\\2", x))
# [1] 33.14
as.numeric(sub("^(\\d+).*?(\\d+).*", "\\1.\\2", x))
# [1] 33.14

as.numeric(paste(str_extract_all(x, "\\d+")[[1]], collapse="."))
# [1] 33.14

答案 1 :(得分:2)

您可以使用stringr库提取数字组件,然后将它们粘贴在一起。这假设您要查找的格式始终只有两个数字。

library(stringr)

s <- c("33 dollars 14 cents", "35 dollars 50 cents")

sapply(str_extract_all(s,"\\d+"), function(x) paste(x, collapse = "."))

[1] "33.14" "35.50"

答案 2 :(得分:0)

假设您的数据格式相同,则可以使用gsub()

这很笨拙但有效:

as.numeric(gsub(" cents","",gsub(" dollars ",".",data)))

答案 3 :(得分:0)

编写一个简单的函数来处理需要几个小步骤的情况总是值得的。这是一个易于阅读的非优雅示例;

numerify <- function(x) {# convert string in form of "33 dollars 14 cents" to numeric 33.14
 x <- gsub('[a-z]','',x) # remove letters
 x <- gsub(' $','',x)    # remove trailing space
 x <- gsub(' +','.',x)   # insert decimal point
 return(as.numeric(x))   # convert to numeric
}