Ziemlich grundlegende Leistung Frage von einem R-Neuling. Ich möchte eine Gruppe ID zu jeder Zeile in einem Datenrahmen durch eindeutige Kombinationen von Feldern zuweisen. Hier ist mein aktueller Ansatz:
> # An example data frame
> df <- data.frame(name=c("Anne", "Bob", "Chris", "Dan", "Erin"),
st.num=c("101", "102", "105", "102", "150"),
st.name=c("Main", "Elm", "Park", "Elm", "Main"))
> df
name st.num st.name
1 Anne 101 Main
2 Bob 102 Elm
3 Chris 105 Park
4 Dan 102 Elm
5 Erin 150 Main
>
> # A function to generate a random string
> getString <- function(size=10) return(paste(sample(c(0:9, LETTERS, letters), size, replace=TRUE), collapse=''))
>
> # Assign a random string for each unique street number + street name combination
> df <- ddply(df,
c("st.num", "st.name"),
function(x) transform(x, household=getString()))
> df
name st.num st.name household
1 Anne 101 Main 1EZWm4BQel
2 Bob 102 Elm xNaeuo50NS
3 Dan 102 Elm xNaeuo50NS
4 Chris 105 Park Ju1NZfWlva
5 Erin 150 Main G2gKAMZ1cU
Während dies für Datenrahmen mit relativ wenigen Zeilen oder einer geringen Anzahl von Gruppen gut funktioniert, stoße ich bei größeren Datensätzen (> 100.000 Zeilen), die viele eindeutige Gruppen haben, auf Leistungsprobleme.
Gibt es Vorschläge zur Verbesserung der Geschwindigkeit dieser Aufgabe? Möglicherweise mit der experimentellen idata.frame() von plyr? Oder gehe ich das alles falsch an?
Vielen Dank im Voraus für Ihre Hilfe.