【发布时间】:2021-02-11 00:13:56
【问题描述】:
我正在尝试使用 R 计算一方面一个向量和另一方面多个向量之间的欧几里得距离。
到目前为止,我一直在关注此文档https://cran.r-project.org/web/packages/neighbr/neighbr.pdf 并使用了距离(x,y,“欧几里得”)。 如果我只计算两个向量之间的距离,即当我在 x 和 y 中都有一行数据时,这非常有效。 但是,在我的原始数据集中,我在 y 中有多行,我想计算这些行中的每一行与 x 中的单行之间的距离。
这怎么可能?
x = structure(list(`Feature I` = 0.85649790378586, `Feature II` = 0.851856356221207, `Feature III` = 0.799580263077569, `Feature IV` = 0.895081402129565, `Feature V` = 0.920173237422567), row.names = c(NA, -1L), class = c("tbl_df", "tbl", "data.frame"))
y = structure(list(`Feature I` = c(0.0444280626160322, 0.00326398594129033, 0.0218000692329814), `Feature II` = c(0.0481646509894741, 0.00509786237104908, 0.0276902769176258), `Feature III` = c(0.0456380620204004, 0.00422956673025977, 0.0347273727088683), `Feature IV` = c(0.0365954415011219, 0.00422974884164406, 0.0328151120410415), `Feature V` = c(0.0384331094111439, 0.00362614754925969, 0.0260414956219995)), row.names = c(NA, -3L), class = c("tbl_df", "tbl", "data.frame"))
【问题讨论】:
-
Something like this - 概括您在
x中是否有一行或多行。 -
如果您需要更多帮助,请通过以复制/粘贴方式共享几行数据(内置数据、模拟数据的代码或
dput()您拥有的数据的复制/粘贴版本,例如dput(your_data[1:4, ])) -
虽然
x中只有一行,但手动编写公式应该很容易,y$dist_from_x = sqrt((y$x - x$x)^2 + (y$y - x$y)^2)。x数据框中的单个值将针对y的每一行“回收”。 -
@GregorThomas 非常感谢您的快速回复!我最近开始使用 R 并寻找解决方案,但不知道究竟要寻找什么以及在哪里可能是一项繁琐的任务......我已经能够在几分钟内在 Excel 中解决这个问题,我已经这样做了检查我的预期“策略”是否有效。但是,由于我需要计算许多实例的距离,从长远来看,在 R 中复制一个代码似乎是更聪明的方法。我会为您截取一些屏幕截图,以便您更好地了解我正在尝试做的事情...
-
请以文本而非屏幕截图的形式分享数据、尝试和期望的结果。我无法在屏幕截图上演示解决方案。但是,如果您使用
dput(),我可以将您的数据复制/粘贴到我的 R 会话中,开发解决方案并向您展示结果。
标签: r vector distance euclidean-distance