如何在R中将百分比字符转换为数字

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)


Ari*_*man 8

首先摆脱无关的角色:

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提供的示例数据).

此函数现在处理:前导非数字字符,尾随非数字字符,以及小数点(如果存在).


Gio*_*oni 7

如果您是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)

  • 我真的很喜欢所有古老的SO问题,现在有了性感的Tidyverse解决方案。 (2认同)
  • readr::parse_number("10%") 产生 '10' - 这里的数字是 0.1 - tidyverse 可能很性感,但如果它真的有效也会有所帮助:) (2认同)