簡體   English   中英

從修改后的距離矩陣計算加權距離

[英]Calculate the weighted distance from a modified distance matrix

我得到了一個修改的距離矩陣,我想在創建變量時使用轉換后的(歸一化)距離。 下面,我有一些生成示例數據的代碼。

set.seed(12)

size <- sample(100:1000, 7)
var <- c("V3", "V4", "V5", "V6", "V7", "V8", "V9")
dist <- matrix(runif(100), nrow = 7, ncol = 7)
diag(dist) <- 0

df <- as.data.frame(cbind(var, size, dist))

這導致數據集如下所示:

  var size                  V3                V4                 V5                V6                V7                 V8                V9
1  V3  549                   0 0.264918377622962  0.787836347473785 0.439429325051606 0.941087544662878   0.97763589094393 0.774718186818063
2  V4  445  0.0228777434676886                 0 0.0978530396241695 0.669819295872003 0.693911424372345  0.197649595327675 0.394586439244449
3  V5  435 0.00832482660189271 0.457607151241973                  0 0.240883231163025 0.843702238984406  0.844225987326354 0.361513090785593
4  V6  346   0.392697197152302 0.540707547217607  0.217823043232784                 0 0.384644460165873 0.0950279189273715 0.421090044546872
5  V7  958   0.813880559289828 0.665679829893634  0.267943592974916 0.882756386883557                 0  0.381151003297418 0.322011524345726
6  V8  273    0.37624845537357 0.112698937533423  0.504767951788381 0.814063254510984  0.58848182996735                  0 0.552160830702633
7  V9  552   0.380812183720991  0.21836716751568  0.188586926786229 0.633264608215541 0.530477509833872  0.152623838977888                 0

數據由幾個變量組成,指示var和不同點之間的距離,其中名為V3V4的列是另一個點,即var == V4V5距離由名為V5的列表示。 Size表示大小。

我想要做的是計算distance的加權總和,其中距離根據另一個點的大小進行加權。 請參閱以下公式: 在此處輸入圖片說明

其中Si是單位i的大小(變量稱為size )。 Di是一個點(即列var3var4var5 ...)到第i個點之間的歸一化距離,並且總和在所有k 個單位上。

例如, Di可以是給定點V3V4的距離( 0.264918377622962 ),那么Si就是var == V4size (即445

當我的數據看起來像這樣時,如何執行此計算?

謝謝!

也許這就是你要找的?

逐列工作,我們將每個點的size除以它與代表相關點的列的距離 (1:7)。 顯然我們排除了對角線。 對結果求和為我們提供了該點的加權大小

set.seed(12)

size <- sample(100:1000, 7)
var <- c("V3", "V4", "V5", "V6", "V7", "V8", "V9")
dist <- matrix(runif(49), nrow = 7, ncol = 7)
diag(dist) <- 0

df <- as.data.frame(cbind(var, size, dist))

df$WS <- sapply(seq(nrow(df)), 
         function(i) sum(as.numeric(as.character((df[[2]][-i]))) / 
                         as.numeric(as.character(df[[i + 2]][-i]))))

df$WS
#> [1] 75937.840 10052.202 13876.181  6011.826  4144.254 13099.493  7330.831

reprex 包(v0.3.0) 於 2020 年 11 月 13 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM