Como encontrar estatísticas de resumo para todas as combinações exclusivas de fatores em um data.frame no R? [fechadas]

11

Eu quero calcular um resumo de uma variável em um data.frame para cada combinação única de fatores no data.frame. Devo usar o plyr para fazer isso? Eu estou bem com o uso de loops em vez de aplicar (); portanto, basta descobrir cada combinação única.

russellpierce
fonte
1
A pergunta é enganosa quando você pergunta sobre combinações únicas de fatores e, em detalhes, você pergunta sobre o resumo por combinações únicas.
Wojtek

Respostas:

7

Embora eu ache que aggregateprovavelmente seja a solução que você está procurando, se você quiser criar uma lista explícita de todas as combinações possíveis de fatores, expand.gridfará isso por você. por exemplo

> 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

Você pode fazer um loop sobre cada linha no quadro de dados resultante para extrair registros dos dados originais.

Mark M. Fredrickson
fonte
11

Veja aggregatee by. Por exemplo, no arquivo de ajuda para 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)
Aniko
fonte
1
resposta correta de execução mais rápida
John
3

Aqui está a solução plyr, que tem a vantagem de retornar várias estatísticas de resumo e produzir uma barra de progresso para cálculos longos:

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'
)
Mike Lawrence
fonte
Profit),m=mean(x
1

Além de outras sugestões, você pode achar útil a describe.by()função no psychpacote. Ele pode ser usado para mostrar estatísticas resumidas das variáveis ​​numéricas nos níveis de uma variável de fator.

Jeromy Anglim
fonte
1

Eu, pessoalmente cast(), gosto do pacote remodelar por causa de sua simplicidade:

library(reshape)
cast(melt(tips), sex ~ smoker | variable, c(sd,mean, length))
Brandon Bertelsen
fonte
1

Em library(doBy)há também a summaryBy()função de, por exemplo,

summaryBy(DV1 + DV2 ~ Height+Weight+Sex,data=my.data)
russellpierce
fonte