2个string如何连接?

如何合并/合并R中的两个值? 例如,我有:

tmp = cbind("GAD", "AB") >tmp [,1] [,2] [1,] "GAD" "AB" 

我的目标是将tmp作为一个string

 tmp_new="GAD,AB" 

哪个函数可以为我做这个?

 paste() 

是要走的路。 正如之前的海报所指出的,粘贴可以做两件事情:

将值连接成一个“string”,例如

 > paste("Hello", "world", sep=" ") [1] "Hello world" 

其中参数sep指定要连接的参数之间要使用的字符,或折叠字符向量

 > x <- c("Hello", "World") > x [1] "Hello" "World" > paste(x, collapse="--") [1] "Hello--World" 

参数collapse指定要折叠的向量元素之间要使用的字符。

你甚至可以结合两者:

 > paste(x, "and some more", sep="|-|", collapse="--") [1] "Hello|-|and some more--World|-|and some more" 

希望这可以帮助。

help.search()是一个方便的函数,例如

 > help.search("concatenate") 

会导致你paste()

对于第一个非paste()答案,我们可以看看stringr::str_c() (然后在下面的toString() )。 这个问题一直没有出现过,所以我觉得有必要提一下它也存在。

正如你所看到的,使用非常简单。

 tmp <- cbind("GAD", "AB") library(stringr) str_c(tmp, collapse = ",") # [1] "GAD,AB" 

从它的文档文件描述来看,它恰好适合这个问题。

要理解str_c是如何工作的,你需要想象你正在build立一个stringmatrix。 每个input参数形成一个列,并使用通常的回收规则扩展到最长参数的长度。 sepstring插入每列之间。 如果collapse为NULL,则每行都折叠为一个string。 如果在每行的末尾插入非空string,并且整个matrix折叠为单个string。

新增4/13/2016 :这是不完全相同,你想要的输出(额外的空间),但没有人提到过。 toString()基本上是paste()collapse = ", "硬编码的版本,所以你可以做

 toString(tmp) # [1] "GAD, AB" 
 > tmp = paste("GAD", "AB", sep = ",") > tmp [1] "GAD,AB" 

我通过searchR连接stringfind了这个: http : //stat.ethz.ch/R-manual/R-patched/library/base/html/paste.html

正如其他人所指出的, paste()是要走的路。 但是,每次你想要非默认的分隔符的paste(str1, str2, str3, sep='')就必须inputpaste(str1, str2, str3, sep='')

你可以很容易地创build使得更简单的包装函数。 例如,如果您发现自己经常连接没有分隔符的string,可以这样做:

 p <- function(..., sep='') { paste(..., sep=sep, collapse=sep) } 

或者如果你经常想要从一个向量(如php中的implode()joinstring:

 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()更有效率。

另外,如果你的目标是直接输出到一个文件或标准输出,你可以使用cat

 cat(s1, s2, sep=", ") 

你可以创build你自己的操作符:

 '%&%' <- function(x, y)paste0(x,y) "new" %&% "operator" [1] newoperator` 

您也可以重新定义'和'( & )运算符:

 '&' <- function(x, y)paste0(x,y) "dirty" & "trick" "dirtytrick" 

与基线语法混淆是丑陋的,但如果你只使用自己的代码,你可以(几乎总是)用*代替逻辑& and运算符,并使用逻辑值而不是使用逻辑“和'

给定你创build的matrixtmp:

 paste(tmp[1,], collapse = ",") 

我假设你为什么用cbind创build一个matrix有一些原因,而不是简单的:

 tmp <- "GAD,AB" 

其他方式:

 sprintf("%s you can add other static strings here %s",string1,string2) 

它有时比paste()函数有用。 %s表示将包含主观string的地方。

请注意,当您尝试构buildpath时,这将派上用场:

 sprintf("/%s", paste("this", "is", "a", "path", sep="/")) 

产量

 /this/is/a/path 

初学者连接string最简单的方法是使用str_c

 library(stringr) str_c("May", "The", "Force", "Be", "With", "You") ## [1] "MayTheForceBeWithYou" 

请安装stringr包: install.packages("stringr")

使用“ 粘贴 ”命令来连接。

 new_function <- function(conditionValue){ returnValue <- "" if(conditionValue == 1) returnValue <- "Passed value is 1" else if(conditionValue == 2) returnValue <- "Passed values is 2" else returnValue <- paste("Passed value is " , conditionValue) } print(new_function(1)) [1] "Passed value is 1" print(new_function(2)) [1] "Passed values is 2" print(new_function(3)) [1] "Passed value is 3" 

欲了解更多详情,请访问: https : //www.r-bloggers.com/string-concatenation-in-r/

考虑一下string是列的情况,结果应该是一个新列:

 df <- data.frame(a = letters[1:5], b = LETTERS[1:5], c = 1:5) df$new_col <- do.call(paste, c(df[c("a", "b")], sep = ", ")) df # abc new_col #1 a A 1 a, A #2 b B 2 b, B #3 c C 3 c, C #4 d D 4 d, D #5 e E 5 e, E 

如果需要粘贴所有列,可以select跳过[c("a", "b")]子集。

 # you can also try str_c from stringr package as mentioned by other users too! do.call(str_c, c(df[c("a", "b")], sep = ", "))