आर में मैट्रिक्स कॉलम में बहुमत वोट ले रहा है
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
हम यहाँMode
से फंक्शन का उपयोग कर सकते हैं
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
और प्रयोग apply
के साथ MARGIN
समारोह की columnwise आवेदन के लिए 2 के रूप में
apply(mymat, 2, Mode)
#[1] 1 -1 -1 1 1
या उपयोग कर रहे हैं asplit/sapply
sapply(asplit(mymat, 2), Mode)
नोट: दोनों समाधान एक सामान्य डेटासेट पर काम करते हैं, न कि केवल ओपी द्वारा दिखाए गए मूल्यों के आधार पर
mymat2 <- cbind(c('A', 'B', 'A'), c('e', 'e', 'f'))
sapply(asplit(mymat2, 2), Mode)
1 27ϕ9
यदि आपके पास आपके नमूना डेटा द्वारा प्रस्तुत प्रकार का द्विआधारी मतदान है, जिसका आप उपयोग कर सकते हैं sign()
और colSums()
:
sign(colSums(mymat))
[1] 1 -1 -1 1 1