从修改后的距离矩阵计算加权距离
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
和不同点之间的距离,其中称为V3
、V4
等的列是另一个点,即到 V5
的 var == V4
距离由名为 V5
的列表示。 Size
表示尺寸。
我想做的是计算distance
的加权和,其中距离根据另一个点的大小进行加权。见下面的公式:
其中Si是单位i的大小,(变量称为size
). Di 是一个点之间的归一化距离(即列 var3
、var4
、var5
.. .)到第i个点,求和遍历所有k 单位。
例如,Di可以是给定点V3
到V4
的距离(0.264918377622962
), 那么 Si 就是 var == V4
的 size
(即 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 package (v0.3.0)
于 2020-11-13 创建
我得到了一个修改后的距离矩阵,我想在其中使用转换后的(归一化的)距离来创建变量。下面,我有一些生成示例数据的代码。
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
和不同点之间的距离,其中称为V3
、V4
等的列是另一个点,即到 V5
的 var == V4
距离由名为 V5
的列表示。 Size
表示尺寸。
我想做的是计算distance
的加权和,其中距离根据另一个点的大小进行加权。见下面的公式:
其中Si是单位i的大小,(变量称为size
). Di 是一个点之间的归一化距离(即列 var3
、var4
、var5
.. .)到第i个点,求和遍历所有k 单位。
例如,Di可以是给定点V3
到V4
的距离(0.264918377622962
), 那么 Si 就是 var == V4
的 size
(即 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 package (v0.3.0)
于 2020-11-13 创建