如何更改字符数据的列格式为" 33美元14美分"格式化为" 33.14"?
的数字数据感谢您的帮助!
答案 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
}