La mia domanda è basata su questo question.R: popolamento e/o duplicazione di righe in base ad altre colonne
Ho un dato come di seguito. Voglio riempire le celle guardando prima verso il basso e poi guardando fino a quando il risultato è lo stesso. In caso di bom = A, voglio riempire le righe come mostrato. Ma in caso di bom = B, come la colonna type_p è diverso, voglio duplicare file e sentire gli spazi vuoti
bom=c(rep("A",4),rep("B",3))
Part=c("","lambda","beta","","tim","tom","")
type_p=c("","sub","sub","","sub","pan","")
ww=c(1,2,3,4,1,2,3)
df=data.frame(bom,Part,type_p,ww)
> df
bom Part type_p ww
1 A 1
2 A lambda sub 2
3 A beta sub 3
4 A 4
5 B tim sub 1
6 B tom pan 2
7 B 3
I dati finali che voglio è come sotto
bom Part type_p ww
1 A lambda sub 1
2 A lambda sub 2
3 A beta sub 3
4 A beta sub 4
5 B tim sub 1
6 B tim sub 2
7 B tim sub 3
5 B tom pan 1
6 B tom pan 2
7 B tom pan 3
________________________________________Update 1
La logica che voglio è la seguente. Per favore ricorda che i miei dati sono molto grandi e ho migliaia di valori in ogni colonna.
bom e ww colonne sono sempre popolati/compilato dati in entrata
- Controllare se una voce nella colonna bom ha più di 1 valore nella colonna type_p
- Se c'è solo 1 valore quindi riempire spazi vuoti nelle colonne type_p e ww prima guardando in basso e poi guardando in alto. In questo caso bom = A ha solo un valore in type_p (sub)
- Se una voce in bom di una colonna ha più di 1 valore univoco nella colonna type_p, quindi creare set aggiuntivi delle stesse righe di quel bom in modo tale che i set totali siano uguale a valori distinti nella colonna type_p per quel bom. In questo caso bom = B ha due valori in type_p (sub e pan)
- vuoti Fill in type_p e ww colonne di prima guardando in basso e poi guardando (guardare la fila fonte per riempire i valori)
=========================================== =========== Update 2
Dopo il punto 3, il frame di dati sarà simile sotto
> df
bom Part type_p ww
1 A lambda sub 1
2 A lambda sub 2
3 A beta sub 3
4 A beta sub 4
5 B tim sub 1
6 B 2
7 B 3
8 B 1
9 B tom pan 2
10 B 3
Questo è molto problema risolvibile, tuttavia il tuo esempio non segue la tua logica: devi essere molto più chiaro attorno al passaggio 3 in modo specifico e in che modo le righe vengono riempite in alto o in basso nel caso duplicato. Ti suggerisco di mostrare anche i fotogrammi intermedi nel tuo esempio (questo potrebbe aiutarti anche a risolvere il problema nella tua mente) – Chris
Ho aggiunto l'aggiornamento 2. – user2543622
Questo è quello che pensavo - quindi sembra che questo violi il principio del riempimento. La riga 8 dovrebbe essere "tim sub"? – Chris