Mengambil suara mayoritas di seluruh kolom matriks di R
Aug 17 2020
mymat <- structure(c(1, 1, 1, -1, -1, -1, -1, 1, -1, 1, 1, 1, 1, 1, -1
), .Dim = c(3L, 5L))
> mymat
[,1] [,2] [,3] [,4] [,5]
[1,] 1 -1 -1 1 1
[2,] 1 -1 1 1 1
[3,] 1 -1 -1 1 -1
Saya ingin mengambil suara mayoritas di seluruh kolom mymat
. Dalam contoh ini, hasil suara mayoritas di seluruh 5 kolom: 1 -1 -1 1 1
.
Saya telah mencoba melihat solusi dari pertanyaan serupa di sini , tetapi karena kolom di dalam mymat
tidak disebutkan namanya, solusi ini tidak berfungsi untuk saya.
Jawaban
akrun Aug 17 2020 at 22:41
Kita bisa menggunakan Mode
fungsi dari sini
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
dan gunakan apply
dengan MARGIN
as 2 untuk penerapan fungsi secara kolom
apply(mymat, 2, Mode)
#[1] 1 -1 -1 1 1
Atau menggunakan asplit/sapply
sapply(asplit(mymat, 2), Mode)
CATATAN: Kedua solusi tersebut bekerja pada kumpulan data umum dan tidak hanya berdasarkan nilai yang ditunjukkan oleh OP
mymat2 <- cbind(c('A', 'B', 'A'), c('e', 'e', 'f'))
sapply(asplit(mymat2, 2), Mode)
1 27ϕ9 Aug 17 2020 at 22:50
Jika Anda memiliki pemungutan suara biner dari jenis yang diwakili oleh data sampel Anda, Anda dapat menggunakan sign()
dan colSums()
:
sign(colSums(mymat))
[1] 1 -1 -1 1 1
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'