假设我有一个带有这样重复字母的向量:
x <- c("b b b b", "a a ")
我想删除重复的字符,以便每个向量仅包含其一个唯一字符。输出看起来像这样:
"b", "a"
我找到了其他解决方案来删除重复的项目,但是它们都涉及到一个字符向量,而不是一个包含空格的字符串。有什么建议吗?
答案 0 :(得分:4)
这是一种使用sub
的基于正则表达式的方法。首先,我删除字符串中的所有空格。然后,我对以下模式进行替换:
(.)\\1{1,}
,我替换为\\1
。此处的逻辑是匹配并捕获单个字母,然后将其以及随后的任何相同字母替换为该单个字母。这样可以有效地满足您的需求。
x <- c("b b b b","a a ")
x <- gsub("\\s+", "", x)
result <- gsub("(.)\\1{1,}", "\\1", x)
result
[1] "b" "a"
答案 1 :(得分:2)
您可以执行以下操作。 R具有内置常数letters
。将x
分成单个字符,并根据此子集letters
。
letters[letters %in% unlist(strsplit(x, ' '))]
[1] "a" "b"
答案 2 :(得分:1)
stringr
中的tidyverse
是另一个可以在R中使用字符串的漂亮程序包;
library(stringr)
x <- c("b b b b","a a ")
x <- str_replace_all(x, "\\s+", "")
unique(unlist(str_split(x, boundary("character"))))
#> [1] "b" "a"
首先删除所有多余的空格,然后将字符串拆分为字符。
此解决方案较为冗长,但实质上与Tim Biegeleisen的答案相同。尽管我认为对于像我这样的regex
新手来说更容易理解。