Как можно объединить две строки?

Как я могу объединить (объединить, объединить) два значения? Например, у меня есть:

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

Моя цель – объединить два значения в «tmp» в одну строку:

 tmp_new = "GAD,AB" 

Какая функция может сделать это для меня?

 paste() 

это путь. Как отмечали предыдущие плакаты, паста может делать две вещи:

объединить значения в одну «строку», например

 > 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() .

Для первого ответа stringr::str_c() paste() мы можем посмотреть на stringr::str_c() (а затем toString() ниже). Это не было до тех пор, пока этот вопрос, поэтому я считаю полезным упомянуть, что он также существует.

Как вы можете видеть, очень проста в использовании.

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

Из описания файла документации это соответствует этой проблеме.

Чтобы понять, как работает str_c, вам нужно представить, что вы создаете матрицу строк. Каждый входной аргумент формирует столбец и расширяется до длины самого длинного аргумента, используя обычные правила повторного набора. Строка sep вставляется между каждым столбцом. Если сбой равен NULL, каждая строка сворачивается в одну строку. Если не-NULL эта строка вставляется в конце каждой строки, а вся matrix свертывается в одну строку.

Добавлено 4/13/2016 : это не совсем то же самое, что и ваш желаемый результат (дополнительное пространство), но никто не упомянул об этом. toString() - это в основном версия paste() с collapse = ", " жестко закодированная, поэтому вы можете сделать

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

Я нашел это у Google, выполнив поиск строк R concatenate : http://stat.ethz.ch/R-manual/R-patched/library/base/html/paste.html

В качестве альтернативы, если ваша цель состоит в том, чтобы напрямую выводить файл или stdout, вы можете использовать cat :

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

Как указывали другие, paste() – это путь. Но может возникнуть раздражение, чтобы печатать paste(str1, str2, str3, sep='') каждый раз, когда вы хотите использовать разделитель по умолчанию.

Вы можете очень легко создавать функции-обертки, которые делают намного проще. Например, если вы очень часто конкатенируете строки без разделителя, вы можете сделать:

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

или если вы часто хотите присоединиться к строкам от вектора (например, implode() от php):

 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 , который делает то же самое, что и my implode , но без разрешения пользовательских разделителей. Это немного более эффективно, чем paste() .

Вы можете создать своего оператора:

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

Вы также можете переопределить оператор «и» ( & ):

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

messing с синтаксисом базовой линии является уродливым, но так же использует paste()/paste0() если вы работаете только с собственным кодом, который вы можете (почти всегда) заменить логическим & and оператором на * и умножить логические значения вместо использования логического ' а также &'

Другой путь:

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

Иногда это полезно, чем функция paste() . %s обозначает место, где будут включены субъективные строки.

Обратите внимание, что это пригодится, когда вы пытаетесь построить путь:

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

вывод

 /this/is/a/path 

Учитывая созданную вами матрицу tmp:

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

Я предполагаю, что есть причина, по которой вы создаете матрицу с использованием cbind, а не просто:

 tmp <- "GAD,AB" 

Рассмотрим случай, когда строки являются столбцами, а результатом должен быть новый столбец:

 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 

При желании, пропустите [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 = ", ")) 

Другой ответ не вставляемый:

 x <- capture.output(cat(data, sep = ",")) x [1] "GAD,AB" 

где

  data <- c("GAD", "AB") 
Давайте будем гением компьютера.