如何从 R 中的字符串中删除方括号和文本

问题描述 投票:0回答:4

我在 R 语言中遇到一个问题来处理数据框 (

test_dataframe
) 列 (
test_column
) 值,如下所示:
列中的原始字符串:

test_column
6.77[9]
5.92[10]
2.98[103]

我需要删除方括号和方括号内的任何字符,因此目标值如下:

test_column
6.77
5.92
2.98

我尝试使用R语言中的

gsub
函数,但不太幸运地解决它,有人可以帮忙解决吗?

r regex string gsub
4个回答
6
投票

我会用:

input <- c("6.77[9]", "5.92[10]", "2.98[103]")
gsub("\\[.*?\\]", "", input)

[1] "6.77" "5.92" "2.98"

正则表达式模式

\[.*?\]
应匹配方括号中的任何引用术语,并且使用
gsub
将告诉 R 替换所有此类术语。


3
投票

您可以使用

sub
并删除方括号后面的所有内容。

df$test_column <- sub("\\[.*", "", df$test_column)
df
#  test_column
#1        6.77
#2        5.92
#3        2.98

您可能希望将

sub
的输出包装在
as.numeric
中。


如果前面总是有一个数值,如示例所示,您也可以使用

parse_number

readr::parse_number(df$test_column)
#[1] 6.77 5.92 2.98

数据

df <- structure(list(test_column = c("6.77[9]", "5.92[10]", "2.98[103]"
)), row.names = c(NA, -3L), class = "data.frame")

2
投票

我们可以使用

str_remove
 中的 
stringr

library(stringr)
library(dplyr)
df %>%
   mutate(test_column = str_remove(test_column, "\\[.*"))
#  test_column
#1        6.77
#2        5.92
#3        2.98

0
投票

这可能也是使用

str_remove_all()
stringr
中的
version: 1.5.1
的另一个选项,它使用
parentheses
创建捕获组,然后通过管道传输到
as.double()
转换为数字向量:

str_remove_all(c("6.77[9]", "5.92[10]", "2.98[103]")
               ,pattern = "(\\[.*\\])") %>%
                as.double()

[1] 6.77 5.92 2.98
© www.soinside.com 2019 - 2024. All rights reserved.