Dupliquer ligne selon un variable
Bonjour,
Je souhaiterais dupliquer les lignes de mon data.frame selon une variable quantitative. Je pourrais faire une boucle sur chacune des lignes mais j'ai un trop gros fichier pour que cela soit envisageable.
Mes données :
Le résultat attendu :
ID |
Poids |
1 |
2 |
1 |
2 |
2 |
4 |
2 |
4 |
2 |
4 |
2 |
4 |
3 |
1 |
Merci par avance,
Damien
Dupliquer ligne selon une variable
Bonjour,
Code:
1 2 3 4 5 6 7 8
| > ID<-c(1,2,3)
> Poids<-c(2,4,1)
> df<-data.frame(ID,Poids)
> df
ID Poids
1 1 2
2 2 4
3 3 1 |
Code:
1 2 3 4 5 6 7 8 9
| > df[rep(row.names(df), df$Poids),]
ID Poids
1 1 2
1.1 1 2
2 2 4
2.1 2 4
2.2 2 4
2.3 2 4
3 3 1 |
Pour les grands data.frame, il est conseillé de remplacer row.names(df) par seq.int(1,nrow(df)) ou seq_len(nrow(df)).
Il est aussi possible d'utiliser la fonction expandRows() du package splitstackshape.
Cordialement,
Dupliquer ligne selon une variable
Bonjour,
Il est possible de dupliquer les observations et numéroter les répétitions par groupe puis de réaliser un test sur le numéro de la répétition :
Code:
1 2 3 4 5 6 7 8 9
| > ID <- c(1,2,3)
> Poids <- c(2,4,1)
> x <- c(1,4,1)
> df <- data.frame (ID, Poids, x)
> df
ID Poids x
1 1 2 1
2 2 4 4
3 3 1 1 |
Code:
1 2 3 4 5 6 7 8 9 10 11
| > df <- df[rep(row.names(df), df$Poids),]
> df$RepNo <- sequence(rle(as.vector(df$ID))$lengths)
> df
ID Poids x RepNo
1 1 2 1 1
1.1 1 2 1 2
2 2 4 4 1
2.1 2 4 4 2
2.2 2 4 4 3
2.3 2 4 4 4
3 3 1 1 1 |
Code:
1 2 3 4 5 6 7 8 9 10
| > df$x <- ifelse(df$RepNo <= df$x, 1, NA)
> df
ID Poids x RepNo
1 1 2 1 1
1.1 1 2 NA 2
2 2 4 1 1
2.1 2 4 1 2
2.2 2 4 1 3
2.3 2 4 1 4
3 3 1 1 1 |
Cordialement,