R 删除单个字母字符串

R 删除单个字母字符串,r,R,在字符串数据列中,如何检查每行中是否存在字母并将其删除 范例 I am a text r r o n n r and here 并将此作为输出 I am a text and here 情况不是很清楚 gsub('\\b[ron] ', '', txt) #[1] "I am a text and here" 或者使用更一般的方法 gsub("(?<=\\b\\K[a-z]) [a-z] ", "", txt, perl

在字符串数据列中,如何检查每行中是否存在字母并将其删除

范例

I am a text r r o n n r and here
并将此作为输出

I am a text and here

情况不是很清楚

gsub('\\b[ron] ', '',  txt)
#[1] "I am a text and here"
或者使用更一般的方法

gsub("(?<=\\b\\K[a-z]) [a-z] ", "", txt, perl = TRUE)
#[1] "I am a text and here"

或者使用
str\u remove\u all

library(stringr)
str_remove_all(txt, "\\b[ron] ")
#[1] "I am a text and here"
数据
txt
gsub(“\\s[A-Za-z](?=)”,“”,“我是一个文本,在这里”,perl=TRUE)
#[1]“我在这里发短信”
由于要保留单个
a
,因此可以使用以下任何一种方法来获得更具体的模式:

###只有三个字母:r o n
gsub(“\\s[orn](?=)”,“”,“我是一个文本,在这里”,perl=TRUE)
#[1]“我是文本,在这里”
###除了“a”和“i”之外的任何一个字母
gsub(\\s[B-HJ-Zb-HJ-z](?=),,,,“我是一个文本,在这里”,perl=TRUE)
#[1]“我是文本,在这里”
(第二个示例中的
i
的例外情况在这里不是严格需要的,而是作为示例提供的。)

之所以使用“(
(?=)
,是因为您声明了前后对空格的要求;如果您使用的模式是
“\\s[orn]\\s”
,那么它将丢失许多单个字母(由于递归替换)。如果稍微放松一下,则可以使用单词边界,如中所示

gsub(\\s[B-HJ-Zb-HJ-z]\\B“,”,“我是一个文本,在这里”)
(虽然从技术上讲,使用perl风格的正则表达式可能会导致性能下降,但我认为只有在您做了大量工作并且需要尽可能多地提高性能时,这才是真正重要的。这不是严格要求的,早期优化是“万恶之源”。)


注意:在最后一个模式中,除了大写的
I
之外,我还排除了小写的
I
;如果您确信您永远不会看到其他有效的
I
,那么您可以调整您的模式,改为使用
[B-HJ-Zb-z]
(感谢@jay.sf强调了这一假设。)

您可以使用stringr软件包,如下所示

library(stringr)
library(dplyr)

# Create dataframe with column
data <-
  data.frame(
    A = c("I am a text r r o n n r and here")
  )

# Replacing ron in column with nothing
data %>%
  mutate(A = str_replace_all(A, "\\b[ron] \\b", ""))

# A
# I am a text and here
库(stringr)
图书馆(dplyr)
#使用列创建数据帧
数据%
变异(A=str\u替换所有(A,\\b[ron]\\b,“”)
#A
#我是一个文本和这里

我认为您的情况需要更具体,单个字母“a”或“I”不是removed@akrun无论是像r或o这样的单个字符,在删除它前后都有空格,为什么第一个
I
仍然存在?你的“字母表”规则太模糊了。
gsub('\\s{2,}','',gsub('\\b[ron]\\b','',txt))
这很有效为什么你要解释小的
“i”
?我不想假设区分大小写,仅此而已。我想,使用
[b-HJ-Zb-z]
很容易。
txt <- "I am a text r r o n n r and here"
library(stringr)
library(dplyr)

# Create dataframe with column
data <-
  data.frame(
    A = c("I am a text r r o n n r and here")
  )

# Replacing ron in column with nothing
data %>%
  mutate(A = str_replace_all(A, "\\b[ron] \\b", ""))

# A
# I am a text and here