【问题标题】:How to concatenate items of a string maintaining the (" ")如何连接维护(“”)的字符串项目
【发布时间】:2019-08-29 22:39:18
【问题描述】:

我想连接一个字符向量的项目:

vector<-c("Hello", "World", "Today")
vector
[1] "Hello" "World" "Today"

我想在所有项目之间插入一个逗号并保持每个字符的 ("")。最终结果应如下所示:

"Hello","World","Today"

是否可以在 R 中执行此操作,我尝试使用 pastepaste0,但到目前为止没有任何运气!

【问题讨论】:

  • paste(vector,collapse = ",") 可以工作,但不要命名向量的vector,因为它是 R 中的一个函数。

标签: r string concatenation


【解决方案1】:

值得指出的是,即使您在打印向量时看到 " 字符,这些字符实际上并不是向量的一部分 - 它们只是由 R 显示,作为在字符向量。如果我们使用cat 来显示向量的内容as-is,我们可以看到这一点。

v <- c("Hello", "World", "Today")
cat(v)
#Hello World Today

根据您的用例,您很可能不需要将实际的逗号和引号嵌入到数据中,而只是在打印时显示它们。如果这是您想要的效果,您可以通过为这些向量定义一个新类和一个 print 方法来确定它们如何显示:

class(v) = c('comma')
print.comma = function(x,...) cat(paste0('"',x,'"', collapse = ','))    
v 
# "Hello","World","Today"

【讨论】:

    【解决方案2】:

    1) 使用shQuote 添加双引号,然后使用 toString 在它们之间插入逗号空格:

    toString(shQuote(v))
    ## [1] "\"Hello\", \"World\", \"Today\""
    

    2)如果没有空格很重要,那么:

    paste(shQuote(v), collapse = ",")
    ## [1] "\"Hello\",\"World\",\"Today\""
    

    3) 另一种方法是通过sprintf(或如上使用paste):

    toString(sprintf('"%s"', v))
    ## [1] "\"Hello\", \"World\", \"Today\""
    

    请注意,反斜杠实际上不在字符串中,而只是由print 显示,因此您知道以下双引号是字符串的一部分,而不是表示字符串结尾的分隔符。

    【讨论】:

    • 感谢您的澄清回答,我不知道这些功能!
    【解决方案3】:

    这是一种方式。请注意,当 "s 是字符串的一部分时,它们是 escaped

    v <- c("Hello", "World", "Today")
    
    v2 <- paste0("\"", v, "\"", collapse=", ")
    
    cat(v2)
    
    # "Hello", "World", "Today"
    

    【讨论】:

    • 注意,您也可以使用'"' - 而不是转义"\"" - ?Quotes 有更多信息。
    猜你喜欢
    • 2017-07-24
    • 2011-09-22
    • 1970-01-01
    • 2013-08-30
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多