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.


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.


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)

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'
)

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.


1

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.