如何在R中给字符串中的每个单词加上引号?

13

我有一个字符串:

words<-"Monday, Tuesday, Wednesday, Thursday,Friday"

我只需要给每个单词加引号:

"Monday", "Tuesday", "Wednesday", "Thursday","Friday"

获取长度为五的字符串。

我知道关于这个主题有很多文章,但我在R中没有找到任何相关信息。

非常感谢。


3
sapply(strsplit(words, ','), function(x) toString(dQuote(x))) - akrun
你需要一个字符串还是五个字符串? - vck
如果您只需要拆分字符串,可以使用strsplit(words, '[,]')。(我不确定为什么您需要为每个字符串添加引号) - Verena Haunschmid
非常感谢大家,这比我预想的要容易。strsplit()是我需要了解的函数。 - Tomás Navarro
这个问题可能会有用:https://dev59.com/gYrda4cB1Zd3GeqPSeY3 - lawyeR
3个回答

15
我们可以通过,将单词拆分为list输出。我们使用sapply循环,对元素进行dQuote处理,然后使用toStringpaste(..., collapse=', ')结合在一起。
sapply(strsplit(words, '[, ]+'), function(x) toString(dQuote(x)))
#[1] "“Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”"
如果我们需要更改花式引号,需要在 dQuote 中添加 FALSE
sapply(strsplit(words, '[, ]+'), function(x) toString(dQuote(x, FALSE)))

3
谢谢,@akrun。你怎么将花体引号改成直体引号?我试过用你的代码,并设置"options(useFancyQuotes = FALSE)",但它到处插入反斜杠:""Monday", "Tuesday", "Wednesday", "Thursday", "Friday""。 - Nova
1
@Nova 默认情况下,引号会被转义。但是,如果是为了打印目的,请使用 cat 包装它,这样就可以不带斜杠打印。 - akrun
2
添加 dQuote = "双引号";还有用于单引号的 sQuotedQuote(x, FALSE) 强制使用普通的 "(或 '),而不是可能存在的“花式”尖角引号。 - MichaelChirico
在这方面,我发现Windows和Mac之间存在差异(据我所知,所有其他设置,如UTF-8,保持相同)。只有在Mac上,我才需要使用@MichaelChirico建议的FALSE参数(顺便说一下,谢谢!),否则我会得到“解析错误...意外输入”的错误提示。 - Pablo Bernabeu
1
@PabloBernabeu 这是在2015年发布的一个解决方案,当时使用的是不同版本的R。现在不清楚您是否想基于此行为对答案进行投反对票。无论如何,在我的Mac上,它与R 4.0.0一起正常工作sapply(strsplit(words, '[, ]+'), function(x) toString(dQuote(x)))# [1] "“Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”" - akrun
显示剩余3条评论

9

使用 gsub

words<-"Monday, Tuesday, Wednesday, Thursday,Friday"
cat(gsub("(\\w+)", '"\\1"', words))
# "Monday", "Tuesday", "Wednesday", "Thursday","Friday"

KISS....

cat(gsub("\\b", '"', words, perl=T))
#"Monday", "Tuesday", "Wednesday", "Thursday","Friday"

\\b 被称为单词边界,它匹配一个单词字符 (A-Z,a-z,_,0-9) 和一个非单词字符 (不是 A-Za-z0-9_) 之间的位置,或者相反。


4
这里可以给一个说明吗? - theforestecologist

4

strsplit函数通过逗号分隔字符串,sub函数则删除空格。

paste(dQuote(sub(" ","",unlist(strsplit(words,split = ",")))),collapse = ", ")

[1] "“Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接