आर में मैट्रिक्स कॉलम में बहुमत वोट ले रहा है

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समारोह की 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 Aug 17 2020 at 22:50

यदि आपके पास आपके नमूना डेटा द्वारा प्रस्तुत प्रकार का द्विआधारी मतदान है, जिसका आप उपयोग कर सकते हैं sign()और colSums():

sign(colSums(mymat))
[1]  1 -1 -1  1  1