Довольно простой вопрос о производительности от R новичка. Я хотел бы присвоить идентификатор группы каждой строке в кадре данных уникальными комбинациями полей. Вот мой текущий подход:Присвоение идентификатора группы с помощью ddply
> # 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
В то время как это работает хорошо для кадров данных с относительно небольшим числом строк или небольшого числа групп, я бегу в проблемы производительности с большими наборами данных (> 100000 строк), которые имеют много уникальных групп.
Любые предложения по улучшению скорости выполнения этой задачи? Возможно, с экспериментальным идентификатором plyr.frame()? Или я все об этом ошибаюсь?
Заранее за вашу помощь.
Очевидно, мне нужно вернуться назад и внимательно прочитать документацию plyr - это именно то, что я искал. Я оценил это решение и JoFrhwld в моем тестовом наборе данных: кадр данных с 164 961 наблюдением и 91 876 уникальных групп на основе трех переменных группировки. Я использовал каждый из этих методов для назначения переменной идентификатора группы 100 раз. Среднее прошедшее время для id() было .958 (sd .0310). Среднее прошедшее время для вставки полей группировки было 1,94 (sd .0946). Благодаря обоим! – danpelota