从 R 中的字符向量中提取数字
在本文中,我们将看到如何在 R 编程语言中从字符向量中提取数字。有使用一些内置函数从字符字符串中提取数字的不同方法。它可以通过以下方式完成:
- 使用字符串 ()函数从字符中提取数字
- 使用 gregexpr() 和字符串字符提取数字
方法一:使用 gsub()函数。
在这种从字符向量中提取数字的方法中,用户必须调用作为 R 语言内置函数之一的 gsub()函数,并传递给定字符串中第一次出现数字的字符串和向量字符串作为此函数的参数,作为回报,此函数将返回给定字符串中第一个出现的数字给用户。
gsub()函数:该函数用于替换查找字符串的所有匹配项,如果参数是字符串向量,则返回长度相同且属性相同的字符串向量。
Syntax: gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE,fixed = FALSE, useBytes = FALSE)
Parameters:
- pattern: string to be matched, supports regular expression
- replacement: string for replacement
- x: string or string vector
- perl: logical. Should Perl-compatible regexps be used? Has priority overextended
- fixed: logical. If the TRUE, the pattern is a string to be matched as is.
- useBytes: logical. If TRUE the matching is done byte-by-byte rather than character-by-character
要在字符串中查找数字,模式将是:
".*?([0-9]+).*"
例子:
R
gfg <- c("7g8ee6ks1", "5f9o1r0", "geeks10")
print(gfg)
res = as.numeric(gsub(".*?([0-9]+).*", "\\1", gfg))
print(res)
R
gfg <- c("7g8ee6ks1", "5f9o1r0", "geeks10")
gfg_numbers <- regmatches(gfg, gregexpr("[[:digit:]]+", gfg))
as.numeric(unlist(gfg_numbers))
输出:
[1] "7g8ee6ks1" "5f9o1r0" "geeks10"
[1] 7 5 10
方法 2:使用 gregexpr() 和 regmatches() 函数
在这种使用 gregexpr() 和字符串 ()函数从字符中提取数字的方法中,用户需要使用特定参数调用这些函数,然后作为回报,这些函数将返回字符串向量中存在的所有数字到用户。
gregexpr()函数:该函数返回一个与文本长度相同的列表,其中每个元素的形式与 regexpr 的返回值相同,除了给出了每个(不相交)匹配的起始位置。
Syntax: gregexpr(pattern, text, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE)
Parameters:
- pattern: regular expression, or string for fixed=TRUE
- text: string, the character vector
- ignore.case: case sensitive or not
- perl: logical. Should perl-compatible regexps be used? Has priority over extended
- fixed: logical. If TRUE, pattern is a string to be matched as is. Overrides all conflicting arguments
- useBytes: logical. If TRUE the matching is done byte-by-byte rather than character-by-character
regmatches()函数:该函数用于从匹配数据中提取或替换匹配的子字符串。
Syntax: regmatches(x, m, invert = FALSE)
Parameters:
- x:-a character vector
- m:-an object with match data
- invert:-a logical: if TRUE, extract or replace the non-matched substrings.
例子:
电阻
gfg <- c("7g8ee6ks1", "5f9o1r0", "geeks10")
gfg_numbers <- regmatches(gfg, gregexpr("[[:digit:]]+", gfg))
as.numeric(unlist(gfg_numbers))
输出:
[1] 7 8 6 1 5 9 1 0 10