R初心者からのかなり基本的なパフォーマンスの質問。フィールドの一意の組み合わせによって、データフレームの各行にグループIDを割り当てたいと思います。これが私の現在のアプローチです:
> # 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
これは、行が比較的少ない、またはグループの数が少ないデータフレームではうまく機能しますが、一意のグループが多数ある大きなデータセット(100,000行を超える)ではパフォーマンスの問題が発生します。
このタスクの速度を向上させるための提案はありますか?おそらくplyrの実験的なidata.frame()で?それとも私はこれについてすべて間違っていますか?
よろしくお願いします。