Intégration data frame dans un tableau

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Anthony Formaux
Messages : 14
Enregistré le : 24 Jan 2020, 07:52

Intégration data frame dans un tableau

Messagepar Anthony Formaux » 23 Sep 2020, 08:40

Bonjour, cela fait très longtemps que je ne me suis pas servi de R et je suis bloqué sur un problème qui me semble pourtant enfantin.

Je possède un data frame simple de cette forme:

Code : Tout sélectionner

       Nom     nobjmax
1      ANGELE       0
2     ARIELLE       0
3  ATMOSPHERE       0
4        BOBO       0
5       EWINE       1
6        FANA       1
7      FELIPE       0
8        FEYA       3   


J'aimerai l'intégrer dans une nouvelle colonne d'un data frame où chaque Nom apparait dans de nombreuses lignes. En d'autres termes, dupliquer le résultat "nobjmax" associé à chaque nom pour chaque ligne.
Avez vous des suggestions?

En vous remerciant par avance.

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Intégration data frame dans un tableau

Messagepar Pierre-Yves Berrard » 23 Sep 2020, 08:51

Bonjour,

D'après ce que je comprends :

Code : Tout sélectionner

merge(df_grand, df_simple, by = "Nom", all.= TRUE)
PY

Facundo Muñoz
Messages : 156
Enregistré le : 04 Juil 2019, 09:58
Contact :

Re: Intégration data frame dans un tableau

Messagepar Facundo Muñoz » 23 Sep 2020, 10:29

Bonjour,

Un exemple reproductible avec la sortie attendu serait utile pour vous aider.
C'est ça ce que vous voulez ?

Code : Tout sélectionner

dat <- data.frame(
  Nom = LETTERS[1:4],
  nobjmax = c(0, 3, 1, 2)
)

## Chaque nom repété nobjmax fois
(res <- rep(dat$Nom, dat$nobjmax))
#> [1] "B" "B" "B" "C" "D" "D"

## Vous pouvez le mettre dans un data.frame ensuite :
data.frame(
  Nom_rep = res
)
#>   Nom_rep
#> 1       B
#> 2       B
#> 3       B
#> 4       C
#> 5       D
#> 6       D

## Dans le tidyverse, il y a une fonction pour cela :
library(tidyr)
uncount(dat, nobjmax)
#>     Nom
#> 2     B
#> 2.1   B
#> 2.2   B
#> 3     C
#> 4     D
#> 4.1   D


Cordialement,
ƒacu.-


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité