Как найти сводную статистику для всех уникальных комбинаций факторов в data.frame в R? [закрыто]

11

Я хочу рассчитать сводку переменной в data.frame для каждой уникальной комбинации факторов в data.frame. Должен ли я использовать plyr для этого? Я в порядке с использованием циклов в отличие от apply (); поэтому достаточно было бы узнать каждую уникальную комбинацию.

russellpierce
источник
1
Вопрос вводит в заблуждение, когда вы спрашиваете об уникальных комбинациях факторов, а затем детально спрашиваете о резюме по уникальным комбинациям.
Войтек

Ответы:

7

Хотя я думаю, что aggregateэто, вероятно, решение, которое вы ищете, если вы хотите создать явный список всех возможных комбинаций факторов, expand.gridэто сделает для вас. например

> expand.grid(height = seq(60, 80, 5), weight = seq(100, 300, 50),
             sex = c("Male","Female"))
       height weight    sex
1      60    100   Male
2      65    100   Male
... 
30     80    100 Female
31     60    150 Female

Затем вы можете перебрать каждую строку в результирующем фрейме данных, чтобы извлечь записи из ваших исходных данных.

Марк М. Фредриксон
источник
11

Смотрите aggregateи by. Например, из файла справки для aggregate:

## Compute the averages according to region and the occurrence of more
## than 130 days of frost.
aggregate(state.x77,
      list(Region = state.region,
           Cold = state.x77[,"Frost"] > 130),
      mean)
Анико
источник
1
Самый быстрый бегущий правильный ответ
Джон
3

Вот решение plyr, которое имеет преимущество, заключающееся в возврате нескольких сводных статистических данных и создании индикатора выполнения для длинных вычислений:

library(ez) #for a data set
data(ANT)
cell_stats = ddply(
    .data = ANT #use the ANT data
    , .variables = .(cue,flanker) #uses each combination of cue and flanker
    , .fun = function(x){ #apply this function to each combin. of cue & flanker
        to_return = data.frame(
            , acc = mean(x$acc)
            , mrt = mean(x$rt[x$acc==1])
        )
        return(to_return)
    }
    , .progress = 'text'
)
Майк Лоуренс
источник
проеяT),мзнак равномеaN(Икс
1

В дополнение к другим предложениям вы можете найти describe.by()функцию в psychпакете полезной. Он может использоваться для отображения сводной статистики по числовым переменным по уровням факторной переменной.

Джером англим
источник
1

Мне лично нравится cast(), из пакета изменения формы из-за его простоты:

library(reshape)
cast(melt(tips), sex ~ smoker | variable, c(sd,mean, length))
Брэндон Бертельсен
источник
1

В library(doBy)есть также summaryBy()функция, например,

summaryBy(DV1 + DV2 ~ Height+Weight+Sex,data=my.data)
russellpierce
источник