2012-05-22 12 views
6

मैट्रिक्समैं प्रत्येक पंक्ति के बीच औसत पूर्ण स्कोर वाले दूरी मैट्रिक्स कैसे बना सकता हूं?

 X1 X2 X3 X4 X5 
[1,] 1 2 3 2 1 
[2,] 2 3 4 4 3 
[3,] 3 4 4 6 2 
[4,] 4 5 5 5 4 
[5,] 2 3 3 3 6 
[6,] 5 6 2 8 4 

मैं एक दूरी प्रत्येक स्तंभ की प्रत्येक पंक्ति के बीच पूर्ण मतलब अंतर युक्त मैट्रिक्स बनाना चाहते हैं को देखते हुए। उदाहरण के लिए, एक्स 1 और एक्स 3 के बीच की दूरी = 1.67 होनी चाहिए:

abs (1 - 3) + abs (2-4) + abs (3-4) + abs (4-5) + abs (2-3) + abs (5-2) = 10/6 = 1.67।

मैं इस तरह से शाकाहारी पैकेज में designdist समारोह का उपयोग कर प्रयास किया है:

designdist(t(test), method = "abs(A-B)/6", terms = "minimum") 

जिसके परिणामस्वरूप दूरी कॉलम 1 के लिए और 3 0.666 है। इस फ़ंक्शन के साथ समस्या यह है कि यह प्रत्येक कॉलम में सभी मानों को बताता है और फिर उन्हें घटा देता है। लेकिन मुझे प्रत्येक पंक्ति (व्यक्तिगत रूप से, पूर्ण) के बीच पूर्ण मतभेदों को जोड़ना होगा और फिर इसे एन

उत्तर

5

द्वारा विभाजित करना होगा, यहां एक लाइन समाधान है। यह आपके डेटा.फ्रेम में कॉलम की प्रत्येक जोड़ी के बीच L1 norm aka city block distance aka Manhattan distance की गणना करने के लिए dist() के method तर्क का लाभ उठाता है।

as.matrix(dist(df, "manhattan", diag=TRUE, upper=TRUE)/nrow(df)) 

यह प्रतिलिपि प्रस्तुत करने योग्य बनाने के लिए:

df <- read.table(text=" 
X1 X2 X3 X4 X5 
    1 2 3 2 1 
    2 3 4 4 3 
    3 4 4 6 2 
    4 5 5 5 4 
    2 3 3 3 6 
    5 6 2 8 4", header=T) 

dmat <- as.matrix(dist(df, "manhattan", diag=TRUE, upper=TRUE)/nrow(df)) 
print(dmat, digits=3) 
#  1  2  3 4  5 6 
# 1 0.00 1.167 1.667 2.33 1.333 3.00 
# 2 1.17 0.000 0.833 1.17 0.833 2.17 
# 3 1.67 0.833 0.000 1.00 1.667 1.67 
# 4 2.33 1.167 1.000 0.00 1.667 1.33 
# 5 1.33 0.833 1.667 1.67 0.000 2.33 
# 6 3.00 2.167 1.667 1.33 2.333 0.00 
+0

यह खूबसूरती से काम किया! धन्यवाद! – Werner

संबंधित मुद्दे

 संबंधित मुद्दे