Bagaimana menemukan statistik ringkasan untuk semua kombinasi unik faktor dalam data.frame di R? [Tutup]

11

Saya ingin menghitung ringkasan variabel dalam data.frame untuk setiap kombinasi unik faktor dalam data.frame. Haruskah saya menggunakan plyr untuk melakukan ini? Saya setuju menggunakan loop sebagai kebalikan dari apply (); jadi hanya mengetahui setiap kombinasi unik sudah cukup.

russellpierce
sumber
1
Pertanyaan menyesatkan saat Anda bertanya tentang kombinasi faktor yang unik dan kemudian secara detail Anda bertanya tentang ringkasan dengan kombinasi unik.
Wojtek

Jawaban:

7

Meskipun saya pikir aggregatemungkin solusi yang Anda cari, jika Anda ingin membuat daftar eksplisit semua kombinasi faktor yang mungkin, expand.gridakan melakukannya untuk Anda. misalnya

> 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

Anda kemudian dapat mengulangi setiap baris dalam bingkai data yang dihasilkan untuk menarik catatan dari data asli Anda.

Mark M. Fredrickson
sumber
11

Lihat aggregatedan by. Misalnya, dari file bantuan untuk 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
sumber
1
menjalankan jawaban yang benar tercepat
John
3

Inilah solusi plyr, yang memiliki keuntungan mengembalikan beberapa statistik ringkasan dan menghasilkan bilah kemajuan untuk perhitungan panjang:

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
sumber
Terima kasih! Ini berhasil, meskipun saya harus menjatuhkan koma dalam panggilan ke data.frame. stats = ddply (.data = ords, .variables =. (Simbol, SysID, Jam), .fun = fungsi (x) {to_return = data.frame (s = jumlah (x Untung) ) return (to_return)}, .progress = 'text')Profit),m=mean(x
1

Selain saran lain, Anda mungkin menemukan describe.by()fungsi dalam psychpaket berguna. Dapat digunakan untuk menampilkan statistik ringkasan tentang variabel numerik di seluruh level variabel faktor.

Jeromy Anglim
sumber
1

Saya pribadi suka cast(), dari paket membentuk kembali karena kesederhanaannya:

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

Di library(doBy)sana juga ada summaryBy()fungsinya, mis

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