基于正则表达式的替换
Substitute based on regex
R 相对较新,在应用基于正则表达式的替换方面需要帮助。
我在一列中有一个数据框,其中有一个数字序列(我感兴趣的值),后跟一串各种字符。
示例:
4623(randomcharacters)
我需要删除初始数字后的所有内容才能继续使用这些值。我的想法是使用 gsub 通过正向后视删除非数字字符。
我的代码是:
sub_function <- function() {
gsub("?<=[[:digit:]].", " ", fixed = T)
}
data_frame$`x` <- data_known$`x` %>%
sapply(sub_function)
但是我得到了错误:
Error in FUN(X[[i]], ...) : unused argument (X[[i]])
如有任何帮助,我们将不胜感激!
有几种方法可以做到这一点,但我喜欢使用 {tidyverse}
:
中的函数
library(tidyverse)
# Create some dummy data
df <- tibble(targetcol = c("4658(randomcharacters)", "5847(randomcharacters)", "4958(randomcharacters)"))
df <- mutate(df, just_digits = str_extract(targetcol, pattern = "^[[:digit:]]+"))
输出(df
的内容):
targetcol just_digits
<chr> <chr>
1 4658(randomcharacters) 4658
2 5847(randomcharacters) 5847
3 4958(randomcharacters) 4958
这是一个基本的 R 函数。
它使用 sub
,而不是 gsub
,因为只有一个替换。而且不需要往后看,元字符 ^
标记字符串的开头,后跟一个可选的减号,再后跟至少一位数字。其他一切都被丢弃。
sub_function <- function(x){
sub("(^-*[[:digit:]]+).*", "\1", x)
}
data <- data.frame(x = c("4623(randomcharacters)", "-4623(randomcharacters)"))
sub_function(data$x)
#[1] "4623" "-4623"
编辑
通过这个简单的修改,函数 returns 一个数值向量。
sub_function <- function(x){
y <- sub("(^-*[[:digit:]]+).*", "\1", x)
as.numeric(y)
}
如果您总是想从数据中提取数字,可以使用 parse_number
from readr
。默认情况下,它还会 return 数字形式的数据。
使用@Rory S 的数据。
sub_function <- function(x) {
readr::parse_number(x)
}
sub_function(df$targetcol)
#[1] 4658 5847 4958
R 相对较新,在应用基于正则表达式的替换方面需要帮助。 我在一列中有一个数据框,其中有一个数字序列(我感兴趣的值),后跟一串各种字符。 示例:
4623(randomcharacters)
我需要删除初始数字后的所有内容才能继续使用这些值。我的想法是使用 gsub 通过正向后视删除非数字字符。 我的代码是:
sub_function <- function() {
gsub("?<=[[:digit:]].", " ", fixed = T)
}
data_frame$`x` <- data_known$`x` %>%
sapply(sub_function)
但是我得到了错误:
Error in FUN(X[[i]], ...) : unused argument (X[[i]])
如有任何帮助,我们将不胜感激!
有几种方法可以做到这一点,但我喜欢使用 {tidyverse}
:
library(tidyverse)
# Create some dummy data
df <- tibble(targetcol = c("4658(randomcharacters)", "5847(randomcharacters)", "4958(randomcharacters)"))
df <- mutate(df, just_digits = str_extract(targetcol, pattern = "^[[:digit:]]+"))
输出(df
的内容):
targetcol just_digits
<chr> <chr>
1 4658(randomcharacters) 4658
2 5847(randomcharacters) 5847
3 4958(randomcharacters) 4958
这是一个基本的 R 函数。
它使用 sub
,而不是 gsub
,因为只有一个替换。而且不需要往后看,元字符 ^
标记字符串的开头,后跟一个可选的减号,再后跟至少一位数字。其他一切都被丢弃。
sub_function <- function(x){
sub("(^-*[[:digit:]]+).*", "\1", x)
}
data <- data.frame(x = c("4623(randomcharacters)", "-4623(randomcharacters)"))
sub_function(data$x)
#[1] "4623" "-4623"
编辑
通过这个简单的修改,函数 returns 一个数值向量。
sub_function <- function(x){
y <- sub("(^-*[[:digit:]]+).*", "\1", x)
as.numeric(y)
}
如果您总是想从数据中提取数字,可以使用 parse_number
from readr
。默认情况下,它还会 return 数字形式的数据。
使用@Rory S 的数据。
sub_function <- function(x) {
readr::parse_number(x)
}
sub_function(df$targetcol)
#[1] 4658 5847 4958