我如何连接(合并,组合)两个值? 例如,我有:
tmp = cbind("GAD", "AB")
tmp
# [,1] [,2]
# [1,] "GAD" "AB"
我的目标是将“tmp”中的两个值连接到一个字符串:
tmp_new = "GAD,AB"
哪个函数可以帮我做这个?
我如何连接(合并,组合)两个值? 例如,我有:
tmp = cbind("GAD", "AB")
tmp
# [,1] [,2]
# [1,] "GAD" "AB"
我的目标是将“tmp”中的两个值连接到一个字符串:
tmp_new = "GAD,AB"
哪个函数可以帮我做这个?
当前回答
正如其他人所指出的,paste()是正确的方法。但是每次需要使用非默认分隔符时,都必须输入paste(str1, str2, str3, sep= "),这很烦人。
您可以非常容易地创建包装器函数,使工作变得更加简单。例如,如果你发现自己经常连接没有分隔符的字符串,你可以这样做:
p <- function(..., sep='') {
paste(..., sep=sep, collapse=sep)
}
或者如果你经常想从一个向量连接字符串(比如PHP中的implode()):
implode <- function(..., sep='') {
paste(..., collapse=sep)
}
允许你这样做:
p('a', 'b', 'c')
#[1] "abc"
vec <- c('a', 'b', 'c')
implode(vec)
#[1] "abc"
implode(vec, sep=', ')
#[1] "a, b, c"
此外,还有内置的paste0,它做的事情与我的implode相同,但不允许自定义分隔符。它比paste()稍微高效一些。
其他回答
对于第一个非paste()答案,我们可以查看stringr::str_c()(然后是下面的toString())。它的存在时间没有这个问题长,所以我认为提到它也存在是有用的。
如你所见,使用起来非常简单。
tmp <- cbind("GAD", "AB")
library(stringr)
str_c(tmp, collapse = ",")
# [1] "GAD,AB"
从它的文档文件描述来看,它很好地解决了这个问题。
为了理解str_c是如何工作的,您需要想象您正在构建一个字符串矩阵。每个输入参数组成一个列,并使用通常的回收规则扩展到最长参数的长度。sep字符串被插入到每一列之间。如果collapse为NULL,则每一行都被折叠成单个字符串。如果非null,则在每一行的末尾插入该字符串,整个矩阵将折叠为单个字符串。
2016年4月13日补充:它与您期望的输出不完全相同(额外的空间),但也没有人提到它。toString()基本上是一个带有collapse = ", "硬编码的paste()版本,所以你可以这样做
toString(tmp)
# [1] "GAD, AB"
Help.search()是一个方便的函数,例如:
> help.search("concatenate")
将引导您粘贴()。
> tmp = paste("GAD", "AB", sep = ",")
> tmp
[1] "GAD,AB"
我从谷歌中通过搜索R个串联字符串找到了这个:http://stat.ethz.ch/R-manual/R-patched/library/base/html/paste.html
正如其他人所指出的,paste()是正确的方法。但是每次需要使用非默认分隔符时,都必须输入paste(str1, str2, str3, sep= "),这很烦人。
您可以非常容易地创建包装器函数,使工作变得更加简单。例如,如果你发现自己经常连接没有分隔符的字符串,你可以这样做:
p <- function(..., sep='') {
paste(..., sep=sep, collapse=sep)
}
或者如果你经常想从一个向量连接字符串(比如PHP中的implode()):
implode <- function(..., sep='') {
paste(..., collapse=sep)
}
允许你这样做:
p('a', 'b', 'c')
#[1] "abc"
vec <- c('a', 'b', 'c')
implode(vec)
#[1] "abc"
implode(vec, sep=', ')
#[1] "a, b, c"
此外,还有内置的paste0,它做的事情与我的implode相同,但不允许自定义分隔符。它比paste()稍微高效一些。
另一个非粘贴的答案:
x <- capture.output(cat(data, sep = ","))
x
[1] "GAD,AB"
在哪里
data <- c("GAD", "AB")