создать совокупный столбец на основе переменных с R

Заранее извиняюсь, если это несколько нубский вопрос, но я просмотрел форум и не смог найти способ поиска того, что я пытаюсь сделать. У меня есть тренировочный набор, и я пытаюсь найти способ уменьшить количество уровней, которые у меня есть для моих категориальных переменных (в приведенном ниже примере категорией является состояние). Я хотел бы сопоставить состояние со средним значением или скоростью уровня. Мой тренировочный набор будет выглядеть следующим образом после ввода во фрейм данных:

    state class mean
1      CA     1    0
2      AZ     1    0
3      NY     0    0
4      CA     0    0
5      NY     0    0
6      AZ     0    0
7      AZ     1    0
8      AZ     0    0
9      CA     0    0
10     VA     1    0

Я хотел бы, чтобы третий столбец в моем фрейме данных был средним значением первого столбца (состояния) на основе переменной класса. поэтому среднее значение для строк CA будет 0,333 ... так что средний столбец можно использовать в качестве замены столбца состояния. Есть ли хороший способ сделать это без написания явного цикла в R?

Как можно отобразить новые уровни (например, новые состояния), если мой тренировочный набор их не включает? Любая ссылка на подходы в R будет принята с благодарностью.


person ak3nat0n    schedule 04.01.2012    source источник


Ответы (2)


Именно для этого и была разработана функция ave. Его действительно можно использовать для построения любого функционального результата по категориям, но его функция по умолчанию означает, отсюда и название, т. е. ave-(ярость):

dfrm$mean <- with( dfrm, ave( class, state ) ) #FUN=mean is the default "setting"
person IRTFM    schedule 05.01.2012
comment
Я принял этот ответ, потому что он не требует от меня использования внешнего пакета. Не могли бы вы изменить состояние и класс в своем ответе? пример: с (dfrm, ave (класс, состояние)) - person ak3nat0n; 07.01.2012

person    schedule
comment
Я думаю, что может быть проще просто использовать ddply и transform (если я правильно понял OP). - person joran; 05.01.2012
comment
На самом деле я просто сделал сводку, но сопоставил ее с исходными данными. Я подозреваю, что одного оператора ddply достаточно, но ОП может использовать его как часть исходных данных. - person Maiasaura; 05.01.2012