Como concatenar (mesclar, combinar) dois valores? Por exemplo, eu tenho:
tmp = cbind("GAD", "AB")
tmp
# [,1] [,2]
# [1,] "GAD" "AB"
Meu objetivo é concatenar os dois valores em "tmp" em uma string:
tmp_new = "GAD,AB"
Qual função pode fazer isso por mim?
r
string-concatenation
r-faq
Hans
fonte
fonte
Respostas:
é o caminho a percorrer. Como os pôsteres anteriores apontaram, a pasta pode fazer duas coisas:
concatenar valores em uma "string", por exemplo
em que o argumento
sep
especifica o (s) caractere (s) a ser usado entre os argumentos para concatenar ou recolher vetores de caracteresonde o argumento
collapse
especifica o (s) caractere (s) a ser usado entre os elementos do vetor a ser recolhido.Você pode até combinar os dois:
Espero que isto ajude.
fonte
paste()
para o meu gosto. Por exemplo,paste(c('a','b'),'blah', c(1,2,3))
resulta em"a blah 1" "b blah 2" "a blah 3"
. Basicamente, ele cria um vetor de strings do mesmo comprimento que o vetor mais longo que é passado e faz um loop dos outros vetores / strings no mesmo comprimento. Muito espaço para comportamento acidental lá.paste0("blah", 1:3)
obter"blah1" "blah2" "blah3"
.data.frame()
não permite fazer isso se os vetores não forem múltiplos um do outro.matrix()
cospe avisos, masarray()
não. Meio chato. Realmente, todos eles devem cuspir avisos a menos que alguma opção é definida ...help.search()
é uma função útil, por exemplolevará você a
paste()
.fonte
Para a primeira não
paste()
resposta, podemos olharstringr::str_c()
(e depoistoString()
abaixo). Não existe há tanto tempo quanto essa pergunta, então acho útil mencionar que ela também existe.Muito simples de usar, como você pode ver.
A partir da descrição do arquivo de documentação, ele se encaixa muito bem nesse problema.
Adicionado em 13/04/2016 : não é exatamente o mesmo que o resultado desejado (espaço extra), mas ninguém o mencionou.
toString()
é basicamente uma versãopaste()
comcollapse = ", "
hard-coded, para que possa fazerfonte
paste
não gera vetores. A outra opção édo.call(paste, as.list(tmp))
.Como outros já apontaram,
paste()
é o caminho a percorrer. Mas pode ser chato ter que digitarpaste(str1, str2, str3, sep='')
toda vez que você quiser o separador não padrão.É muito fácil criar funções de invólucro que tornam a vida muito mais simples. Por exemplo, se você encontrar concatenações de strings sem separador com muita frequência, poderá:
ou se você frequentemente deseja juntar strings de um vetor (como
implode()
no PHP):Permite que você faça isso:
Além disso, há o built-in
paste0
, que faz o mesmo que o meuimplode
, mas sem permitir separadores personalizados. É um pouco mais eficiente quepaste()
.fonte
Encontrei isso no Google pesquisando as seqüências de caracteres concatenadas R : http://stat.ethz.ch/R-manual/R-patched/library/base/html/paste.html
fonte
Como alternativa, se seu objetivo é gerar diretamente para um arquivo ou stdout, você pode usar
cat
:fonte
paste
resposta 4 anos depois, quando já existem cerca de uma dúzia depaste
respostas?Outra maneira:
Às vezes é útil que a
paste()
função.%s
indica o local onde as cadeias subjetivas serão incluídas.Observe que isso será útil quando você tentar criar um caminho:
resultado
fonte
paste
não é flexível o suficiente se você deseja acrescentar algo a uma string.Você pode criar seu próprio operador:
Você também pode redefinir o
&
operador 'e' ( ):mexer com a sintaxe da linha de base é feio, mas,
paste()/paste0()
se você trabalha apenas com seu próprio código, pode (quase sempre) substituir o& and
operador lógico por*
e fazer a multiplicação dos valores lógicos em vez de usar o lógico 'e'fonte
paste0(as.matrix(iris[1:4]) , as.matrix(iris[1:4]))
eas.matrix(iris[1:4]) %&% as.matrix(iris[1:4])
Dada a matriz, tmp, que você criou:
Suponho que há alguma razão pela qual você está criando uma matriz usando cbind, em vez de simplesmente:
fonte
Considere o caso em que as strings são colunas e o resultado deve ser uma nova coluna:
Opcionalmente, pule o
[c("a", "b")]
subconjunto se todas as colunas precisarem ser coladas.fonte
stringi, stringr
bibliotecas são mais rápidas.Outra resposta não colada:
Onde
fonte
glue
é uma nova função, classe de dados e pacote que foi desenvolvida como parte dotidyverse
, com muitas funcionalidades estendidas. Ele combina recursos de colar, sprintf e as outras respostas anteriores.Criado em 2019-03-06 pelo pacote reprex (v0.2.1)
Sim, é um exagero para o exemplo simples desta pergunta, mas poderoso para muitas situações. (veja https://glue.tidyverse.org/ )
Exemplo rápido em comparação
paste
com owith
abaixo. Oglue
código foi um pouco mais fácil de digitar e parece um pouco mais fácil de ler.Criado em 2019-03-06 pelo pacote reprex (v0.2.1)
fonte