Fra*_*ang 35 r numeric character
将百分比字符转换为数字时遇到问题.例如,我想将"10%"转换为10%,但是
as.numeric("10%")
Run Code Online (Sandbox Code Playgroud)
回报NA
.你有什么想法?
Pau*_*tra 63
每个定义10%不是数字向量.因此,答案NA是正确的.您可以以这种方式将包含这些数字的字符向量转换为数字:
percent_vec = paste(1:100, "%", sep = "")
as.numeric(sub("%", "", percent_vec))
Run Code Online (Sandbox Code Playgroud)
这可以通过使用sub来替换%字符.
Jos*_*ich 28
删除"%"
,转换为数字,然后除以100.
x <- c("10%","5%")
as.numeric(sub("%","",x))/100
# [1] 0.10 0.05
Run Code Online (Sandbox Code Playgroud)
首先摆脱无关的角色:
topct <- function(x) { as.numeric( sub("\\D*([0-9.]+)\\D*","\\1",x) )/100 }
my.data <- paste(seq(20)/2, "%", sep = "")
> topct( my.data )
[1] 0.005 0.010 0.015 0.020 0.025 0.030 0.035 0.040 0.045 0.050 0.055 0.060 0.065 0.070 0.075 0.080
[17] 0.085 0.090 0.095 0.100
Run Code Online (Sandbox Code Playgroud)
(感谢Paul提供的示例数据).
此函数现在处理:前导非数字字符,尾随非数字字符,以及小数点(如果存在).
如果您是tidyverse
用户(实际上也是,如果不是)parse_number
,则readr
包中现在有一个函数:
readr::parse_number("10%")
Run Code Online (Sandbox Code Playgroud)
优点是可以通用化为其他常见的字符串格式,例如:
parse_number("10.5%")
parse_number("$1,234.5")
Run Code Online (Sandbox Code Playgroud)