Por ejemplo, si tengo esto:
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
Entonces, ¿cómo combino las dos columnas n
y s
en una nueva columna con el nombre de x
que se ve así:
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
usuario2654764
fuente
fuente
paste()
? En el ejemplo anterior, lax
columna debe tener datos como2-aa
, luego3-bb
y5-cc
.paste(df$n,df$s,sep="-")
s
tiene un valor NA? (No me gusta ver3 NA
sidf$s[2]=NA
)Para insertar un separador:
fuente
A - B
lugar deA-B
. ¿Es posible eliminar este espacio extra?paste(df$n,df$s,sep="-")
sep
argumento ...). Sin embargo, la otra respuesta, publicada casi 4 años antes que la suya, responde perfectamente a la pregunta.Como ya se mencionó en los comentarios de Uwe y UseR, una solución general en el
tidyverse
formato sería usar el comandounite
:fuente
x
representa el nombre de la nueva columna que contiene los valores combinados. Piense en dplyr'smutate
:df %>% dplyr::mutate(x = "your operations")
Se aplican algunos ejemplos con NA y su eliminación utilizando
fuente
tidyr
paquete de reproducir la respuesta esperada de la pregunta original que esto sería una sola línea:tidyr::unite(df, x, n, s, sep = " ", remove = FALSE)[, c(names(df), "x")]
. Sin embargo, no veo una razón para hacerlo, ya quedf$x <- paste(df$n,df$s)
es mucho más simple.paste
otidyr::unite
.Usando
dplyr::mutate
:fuente
dplyr::mutate()
. Lo siento, solo trato de ser útil, ya no contaminaré el sitio y me abstendré de publicaciones futuras.Podemos usar paste0 :
Si no desea que se introduzca ningún espacio de relleno en el campo concatenado. Esto es más útil si planea usar el campo combinado como una identificación única que representa combinaciones de dos campos.
fuente
En vez de
paste
(espacios predeterminados),paste0
(forzar la inclusión de la faltaNA
como personaje) ounite
(restringido a 2 columnas y 1 separador),Sugeriría una alternativa tan flexible como
paste0
pero más cuidadosa conNA
:stringr::str_c
Creado el 10/04/2020 por el paquete reprex (v0.3.0)
nota adicional de la
str_c
documentaciónfuente
paste0(n,"-",s,".",b)
ystr_c(n,"-",s,".",b)
son exactamente iguales, ambos usan un separador predeterminado que es la cadena vacía''
. Tampoco sé por quépaste
es "ordenado", ¿quieres decir que no te gustan los espacios?paste0
ystr_c
no son exactamente iguales. eche un vistazo a estos enlaces: (1) rdocumentation.org/packages/stringr/versions/1.3.1/topics/str_c (2) stackoverflow.com/questions/53118271/…str_c
documentación también podría ser más explícita!).Hay otras excelentes respuestas, pero en el caso de que no sepa los nombres de las columnas o el número de columnas que desea concatenar de antemano, lo siguiente es útil.
fuente