การโหวตเสียงข้างมากในคอลัมน์เมทริกซ์ใน 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
ฉันต้องการใช้คะแนนเสียงข้างมากในคอลัมน์ของmymat
. ในตัวอย่างนี้ผลการลงคะแนนเสียงส่วนใหญ่ใน 5 1 -1 -1 1 1
คอลัมน์:
ฉันได้ลองดูคำตอบจากคำถามที่คล้ายกันที่นี่แต่เนื่องจากคอลัมน์ในmymat
ไม่มีชื่อวิธีแก้ปัญหาเหล่านี้จึงไม่ได้ผลสำหรับฉัน
คำตอบ
akrun Aug 17 2020 at 22:41
เราสามารถใช้Mode
ฟังก์ชันจากที่นี่
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
และใช้apply
กับMARGIN
2 สำหรับการประยุกต์ใช้ columnwise ของฟังก์ชัน
apply(mymat, 2, Mode)
#[1] 1 -1 -1 1 1
หรือโดยใช้ asplit/sapply
sapply(asplit(mymat, 2), Mode)
หมายเหตุ: โซลูชันทั้งสองทำงานบนชุดข้อมูลทั่วไปและไม่เพียงขึ้นอยู่กับค่าที่แสดงโดย 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
หากคุณมีการลงคะแนนไบนารีประเภทที่แสดงโดยข้อมูลตัวอย่างของคุณคุณสามารถใช้sign()
และcolSums()
:
sign(colSums(mymat))
[1] 1 -1 -1 1 1