Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中将百分比字符转换为数字_R_Character_Numeric - Fatal编程技术网

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

如何在R中将百分比字符转换为数字,r,character,numeric,R,Character,Numeric,将百分比字符转换为数字时遇到问题。我想把“10%”转换成10%,但是 as.numeric("10%") 返回NA。你有什么想法吗?10%按定义不是数字向量。因此,答案NA是正确的。可以通过以下方式将包含这些数字的字符向量转换为数字: percent_vec = paste(1:100, "%", sep = "") as.numeric(sub("%", "", percent_vec)) 这是通过使用sub将%字符替换为零来实现的。删除“%”,转换为数字,然后除以100 x <-

将百分比字符转换为数字时遇到问题。我想把“10%”转换成10%,但是

as.numeric("10%")

返回
NA
。你有什么想法吗?

10%按定义不是数字向量。因此,答案NA是正确的。可以通过以下方式将包含这些数字的字符向量转换为数字:

percent_vec = paste(1:100, "%", sep = "")
as.numeric(sub("%", "", percent_vec))
这是通过使用sub将%字符替换为零来实现的。

删除
“%”,转换为数字,然后除以100

x <- c("10%","5%")
as.numeric(sub("%","",x))/100
# [1] 0.10 0.05

x首先去除无关字符:

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
topct尝试:

> x = "10%"
> as.numeric(substr(x,0,nchar(x)-1))
[1] 10
这也适用于小数:

> x = "10.1232%"
> as.numeric(substr(x,0,nchar(x)-1))
[1] 10.1232

其思想是符号
%
始终位于字符串的末尾。

我想转换整个列,并组合上述答案

pct_to_number<- function(x){
  x_replace_pct<-sub("%", "", x)
  x_as_numeric<-as.numeric(x_replace_pct)
  }
df[['ColumnName']] = pct_to_number(df[['ColumnName']])

pct\u to\u number如果您是
tidyverse
用户(如果不是),则
readr
包中现在有一个
parse\u number
函数:

readr::parse_number("10%")
其优点是可以推广到其他常见的字符串格式,例如:

parse_number("10.5%")
parse_number("$1,234.5")

它更复杂,因为它会去掉数字后面的任何非数字内容……经过编辑,使其也能处理前面的字符,并使其成为一个可重复使用的函数。@PaulHiemstra谢谢。我有点犹豫不决,不想把它说得太笼统,我可能还是更喜欢你的解决方案,因为有任何非“%”的非数字字符可能意味着某些东西根本不是一个百分比。因此,返回NA可能比返回合理的内容更可取。正如您所说,对于更通用的函数,您的解决方案更可取。但是它将被称为percentChar2numeric()或其他什么,OP将不得不面对复杂性的问题(这将隐藏在函数中)。我真的很喜欢所有旧的SO问题,现在它们都有性感的Tidyverse解决方案。谢谢Gregor!修改了我的回答。我在第三行末尾添加了一个
/100
,以获得正确的浮点值。