Por exemplo, se eu tiver este:
n = c(2, 3, 5)
s = c("aa", "bb", "cc")
b = c(TRUE, FALSE, TRUE)
df = data.frame(n, s, b)
n s b
1 2 aa TRUE
2 3 bb FALSE
3 5 cc TRUE
Então, como faço para combinar as duas colunas n
e s
em uma nova coluna chamada de x
forma que se pareça com isto:
n s b x
1 2 aa TRUE 2 aa
2 3 bb FALSE 3 bb
3 5 cc TRUE 5 cc
r
dataframe
multiple-columns
r-faq
user2654764
fonte
fonte
paste()
? Para o exemplo acima, ax
coluna deve ter dados como2-aa
, então3-bb
e5-cc
.paste(df$n,df$s,sep="-")
s
tem valor NA? (Não gosto de ver3 NA
sedf$s[2]=NA
)Para inserir um separador:
fonte
A - B
vez deA-B
. É possível remover esse espaço extra?paste(df$n,df$s,sep="-")
sep
argumento ...). A outra resposta, postada quase 4 anos antes da sua, é, no entanto, responder perfeitamente à pergunta.Conforme já mencionado nos comentários de Uwe e UseR, uma solução geral no
tidyverse
formato seria usar o comandounite
:fonte
x
representa o nome da nova coluna que contém os valores combinados. Pense em dplyr'smutate
:df %>% dplyr::mutate(x = "your operations")
Alguns exemplos com NAs e sua remoção usando aplicar
fonte
tidyr
pacote para reproduzir a resposta esperada da pergunta original que este seria um one-liner:tidyr::unite(df, x, n, s, sep = " ", remove = FALSE)[, c(names(df), "x")]
. No entanto, não vejo razão para fazer isso, poisdf$x <- paste(df$n,df$s)
é muito mais simples.paste
ou simplestidyr::unite
.Usando
dplyr::mutate
:fonte
dplyr::mutate()
. Desculpe, só estou tentando ser útil - não vou poluir mais o site e me abster de postagens futuras.Podemos usar paste0 :
Se você não deseja que nenhum espaço de preenchimento seja introduzido no campo concatenado. Isso é mais útil se você estiver planejando usar o campo combinado como um id único que representa combinações de dois campos.
fonte
Ao invés de
paste
(espaços padrão),paste0
(forçar a inclusão de ausenteNA
como personagem) ouunite
(restrito a 2 colunas e 1 separador),Eu sugeriria uma alternativa tão flexível quanto,
paste0
porém mais cuidadosa comNA
:stringr::str_c
Criado em 2020-04-10 pelo pacote reprex (v0.3.0)
nota extra da
str_c
documentaçãofonte
paste0(n,"-",s,".",b)
estr_c(n,"-",s,".",b)
são exatamente iguais, ambos usam um separador padrão que é a string vazia''
. Também não sei porquepaste
é "arrumado", quer dizer que não gosta de espaços?paste0
estr_c
não são exatamente iguais. dê uma olhada nestes links: (1) rdocumentation.org/packages/stringr/versions/1.3.1/topics/str_c (2) stackoverflow.com/questions/53118271/…str_c
documentação poderia ser mais explítica também!).Existem outras ótimas respostas, mas no caso em que você não sabe os nomes das colunas ou o número de colunas que deseja concatenar de antemão, o seguinte é útil.
fonte