从 R 中的字符向量中删除引号?

Remove quotes from a character vector in R?

我有一些文字:

version of mackinnon’s “dominance approach,”

我已将其读入字符向量:

> my.char.vector
[1] "version" "of" "mackinnon’s" "“dominance" "approach,”" 

如何删除双引号(和单引号),这样 my.char.vector 就是

[1] "version" "of" "mackinnons" "dominance" "approach," 

事实上,具有这个确切标题的另一个问题并不是在问同样的问题 - 它试图在不带引号的情况下打印。我的字符向量中的元素确实包含引号,我正试图将其删除。

这些是 "fancy" 引号——我从屏幕上剪切并粘贴了它们(如果您只使用 SHIFT-' [或键盘上的任何其他键],您将得到常规的 " 引号 .. .).

mcv <- c("version","of","mackinnon’s","“dominance","approach,”")
gsub("[’”“]","",mcv)

另一种可能性(似乎可以在我的系统上工作,但可能?system/locale/etc。具体?):将奇怪的字符转换为“#”或其他安全的字符,然后删除它们。

gsub("#","",iconv(mcv,"latin1","ASCII","#"))

试试这个。

gsub("[^[:print:]]", "", my.char.vector)

您可以为此使用 stringi。我们可以使用 ICU 元字符 \P 来否定匹配值,并使用 -- 来减去逗号的否定。

library(stringi)
mcv <- c("version", "of", "mackinnon’s", "“dominance", "approach,”")
stri_replace_all_regex(mcv, "[\P{Ll}--,]", "")
# [1] "version"    "of"         "mackinnons" "dominance"  "approach," 

我只是在学习 ICU,但我认为这是正确的表达方式。

另一个选项qdap

library(qdap)
strip(mcv, char.keep=',')
#[1] "version"    "of"         "mackinnons" "dominance"  "approach," 

或使用stringi

library(stringi)
stri_replace_all_regex(mcv, '[^[:alnum:],]+', '')
#[1] "version"    "of"         "mackinnons" "dominance"  "approach," 

base R

 vapply(regmatches(mcv,gregexpr('[A-Za-z,]+', mcv)), paste,
                                    collapse="", character(1L))
#[1] "version"    "of"         "mackinnons" "dominance"  "approach," 

数据

mcv <- c("version","of","mackinnon’s","“dominance","approach,”")