Mam data.frame df
i chcę, aby każdy rząd w tym df
jest powielany lengthTime
razy i że nowa kolumna dodaje, że liczy się od 1 do lengthTime
dla każdego wiersza w df
.Alternatywa expand.grid dla data.frames
Wiem, to brzmi dość skomplikowanie, ale to, czego zasadniczo chcę, to zastosowanie expand.grid
do df
. Oto brzydki obejście i mam wrażenie, że najbardziej być łatwiejszy rozwiązanie (może nawet funkcję 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)
Myślałem, że mogę po prostu użyć expand.grid(df, 1:lengthTime)
, ale to nie działa. outer
też nie przynosiła szczęścia. Czy ktoś zna dobre rozwiązanie?
Mój naprawdę nie różni się niczym od jorana, który pokonał mnie o 40 sekund, ale zostawię to, ponieważ jest nieco bardziej wyraźny. –
Najpierw przyjadę, służę, więc przyjąłem jego odpowiedź ;-) Ale +1 dla was obojga. To bardzo miłe rozwiązanie! –