R: parse_number 如果字符串包含点则失败
R: parse_number fails if the string contains a dot
如果字符串包含 .
,parse_number
from readr
失败
它适用于特殊字符。
library(readr)
#works
parse_number("%ç*%&23")
#does not work
parse_number("art. 23")
Warning: 1 parsing failure.
row col expected actual
1 -- a number .
[1] NA
attr(,"problems")
# A tibble: 1 x 4
row col expected actual
<int> <int> <chr> <chr>
1 1 NA a number .
为什么会这样?
更新:
预期的结果是 23
点后有一个space导致错误。这个序列的预期数字是多少(0.23 或 23)?
parse_number
似乎在寻找由您的语言环境定义的小数点和分组分隔符,请参阅此处的文档 https://www.rdocumentation.org/packages/readr/versions/1.3.1/topics/parse_number
您可以选择使用以下方式更改区域设置(grouping_mark 是一个带有 space 的点):
parse_number("art. 23", locale=locale(grouping_mark=". ", decimal_mark=","))
Output: 23
或者去掉前面的space:
parse_number(gsub(" ", "" , "art. 23"))
Output: 0.23
编辑:要将点作为缩写和数字处理,请使用以下内容:
library(stringr)
> as.numeric(str_extract("art. 23", "\d+\.*\d*"))
[1] 23
> as.numeric(str_extract("%ç*%&23", "\d+\.*\d*"))
[1] 23
上面使用正则表达式来识别字符串中的数字模式。
\d+
找到一个数字
\.*
找到一个点
\d*
找到剩余的数字
注意:我不是正则表达式方面的专家,但有很多其他资源可以让你成为正则表达式专家
.
,parse_number
from readr
失败
它适用于特殊字符。
library(readr)
#works
parse_number("%ç*%&23")
#does not work
parse_number("art. 23")
Warning: 1 parsing failure.
row col expected actual
1 -- a number .
[1] NA
attr(,"problems")
# A tibble: 1 x 4
row col expected actual
<int> <int> <chr> <chr>
1 1 NA a number .
为什么会这样?
更新:
预期的结果是 23
点后有一个space导致错误。这个序列的预期数字是多少(0.23 或 23)?
parse_number
似乎在寻找由您的语言环境定义的小数点和分组分隔符,请参阅此处的文档 https://www.rdocumentation.org/packages/readr/versions/1.3.1/topics/parse_number
您可以选择使用以下方式更改区域设置(grouping_mark 是一个带有 space 的点):
parse_number("art. 23", locale=locale(grouping_mark=". ", decimal_mark=","))
Output: 23
或者去掉前面的space:
parse_number(gsub(" ", "" , "art. 23"))
Output: 0.23
编辑:要将点作为缩写和数字处理,请使用以下内容:
library(stringr)
> as.numeric(str_extract("art. 23", "\d+\.*\d*"))
[1] 23
> as.numeric(str_extract("%ç*%&23", "\d+\.*\d*"))
[1] 23
上面使用正则表达式来识别字符串中的数字模式。
\d+
找到一个数字\.*
找到一个点\d*
找到剩余的数字
注意:我不是正则表达式方面的专家,但有很多其他资源可以让你成为正则表达式专家