Ho un data.frame df
e voglio che ogni riga in questa df
viene duplicato lengthTime
volte e che viene aggiunta una nuova colonna che conta da 1 a lengthTime
per ogni riga df
.Alternativa a expand.grid per data.frames
Lo so, sembra piuttosto complicato, ma quello che voglio in pratica è applicare expand.grid
a df
. Ecco un soluzione brutto e ho la sensazione che ci massimo essere una soluzione più semplice (forse anche una funzione di base-R?):
df <- data.frame(ID = rep(letters[1:3], each=3),
CatA = rep(1:3, times = 3),
CatB = letters[1:9])
lengthTime <- 3
nrRow <- nrow(df)
intDF <- df
for (i in 1:(lengthTime - 1)) {
df <- rbind(df, intDF)
}
df$Time <- rep(1:lengthTime, each=nrRow)
ho pensato che avrei potuto semplicemente usare expand.grid(df, 1:lengthTime)
, ma che non funziona. outer
non ha portato fortuna. Quindi qualcuno conosce una buona soluzione?
Il mio non è diverso da quello di joran che mi ha battuto di 40 secondi, ma lo lascerò perché è leggermente più esplicito. –
Primo arrivato, prima cosa, quindi ho accettato la sua risposta ;-) Ma +1 per entrambi. Questa è una soluzione molto accurata! –