Par exemple si j'ai ceci:
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
Alors comment combiner les deux colonnes n
et s
dans une nouvelle colonne nommée de x
telle sorte qu'elle ressemble à ceci:
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
la source
la source
paste()
? Pour l'exemple ci-dessus, lax
colonne doit avoir des données comme2-aa
, puis3-bb
et5-cc
.paste(df$n,df$s,sep="-")
s
a une valeur NA? (Je n'aime pas voir3 NA
sidf$s[2]=NA
)Pour insérer un séparateur:
la source
A - B
au lieu deA-B
. Est-il possible de supprimer cet espace supplémentaire?paste(df$n,df$s,sep="-")
sep
argument ...). L'autre réponse, postée près de 4 ans avant la vôtre, répond pourtant parfaitement à la question.Comme déjà mentionné dans les commentaires de Uwe et UseR, une solution générale dans le
tidyverse
format serait d'utiliser la commandeunite
:la source
x
représente le nom de la nouvelle colonne contenant les valeurs combinées. Pensez à dplyr'smutate
:df %>% dplyr::mutate(x = "your operations")
Quelques exemples avec des NA et leur suppression à l'aide de apply
la source
tidyr
package pour reproduire la réponse attendue de la question initiale ce serait une seule ligne:tidyr::unite(df, x, n, s, sep = " ", remove = FALSE)[, c(names(df), "x")]
. Cependant, je ne vois pas de raison de le faire cardf$x <- paste(df$n,df$s)
c'est beaucoup plus simple.paste
outidyr::unite
.Utilisation
dplyr::mutate
:la source
dplyr::mutate()
. Désolé, j'essaie juste d'être utile - je ne polluerai plus le site et je m'abstiendrai de publier de futurs messages.Nous pouvons utiliser paste0 :
Si vous ne voulez aucun espace de remplissage introduit dans le champ concaténé. Ceci est plus utile si vous prévoyez d'utiliser le champ combiné comme un identifiant unique qui représente des combinaisons de deux champs.
la source
Au lieu de
paste
(espaces par défaut),paste0
(forcer l'inclusion de manquantNA
comme caractère) ouunite
(contraint à 2 colonnes et 1 séparateur),Je suggérerais une alternative aussi flexible que
paste0
mais plus prudente avecNA
:stringr::str_c
Créé le 2020-04-10 par le package reprex (v0.3.0)
note supplémentaire de
str_c
documentationla source
paste0(n,"-",s,".",b)
etstr_c(n,"-",s,".",b)
sont exactement les mêmes, les deux utilisent un séparateur par défaut qui est la chaîne vide''
. Je ne sais pas non plus pourquoipaste
est «bien rangé», tu veux dire que tu n'aimes pas les espaces?paste0
etstr_c
ne sont pas exactement les mêmes. jetez un œil à ces liens: (1) rdocumentation.org/packages/stringr/versions/1.3.1/topics/str_c (2) stackoverflow.com/questions/53118271/…str_c
documentation pourrait être plus explicite aussi!).Il existe d'autres bonnes réponses, mais dans le cas où vous ne connaissez pas les noms de colonnes ou le nombre de colonnes que vous souhaitez concaténer au préalable, ce qui suit est utile.
la source