计算不同数据框中坐标之间的距离

冰华夫饼

假设我有以下两个数据框

dfA <- data.frame(x = rpois(10,2), y = rpois(10,2), z = rpois(10,2), q = rpois(10,2), t = rpois(10,2))
dfB <- data.frame(x = rpois(10,2), y = rpois(10,2), z = rpois(10,2), q = rpois(10,2), t = rpois(10,2))
dfAB <- map2_df(dfA, dfB, str_c, sep=",") %>%
  rename_all(~ str_c('C', seq_along(.)))

dfC <- data.frame(x = rpois(10,2), y = rpois(10,2), z = rpois(10,2), q = rpois(10,2), t = rpois(10,2))
dfD <- data.frame(x = rpois(10,2), y = rpois(10,2), z = rpois(10,2), q = rpois(10,2), t = rpois(10,2))
dfCD <- map2_df(dfC, dfD, str_c, sep=",") %>%
  rename_all(~ str_c('C', seq_along(.)))

我要寻找的是找到第一个数据帧和第二个数据帧中坐标之间的距离,因此我得到了第三个数据帧,其中包含dfAB的第一个单元格与dfCD的第一个单元格之间的距离,以及dfAB的第二个单元格之间的距离dfCD的第二个单元,依此类推;即调用列C和行R,我想之间的距离

dfAB        and     dfCD
C1 C2 C...          C1 C2 C...  
R1 R1               R1 R1   
R2 R2               R2 R2
... ...             ... ...
etc

我正在寻找的是dfABC1R1和dfCDC1R1,dfABC1R2和dfCDC1R2,dfABC2R1和dfCDC2R1等之间的距离。

当我尝试使用

dist(dfAB,dfCD)

我收到错误:dist(dfAB,dfCD)中的错误:无效的距离方法

任何帮助深表感谢

乌图邦

关于错误消息的注意

  • 您的dist(dfAB, dfCD)波谷错误,因为的第二个参数dist()是描述距离计算方法的字符串(例如“欧几里得”);
  • dfABdfCD数据框中的坐标元组是字符串。因此,即使dist()允许您计算两个数据帧的每个元素之间的距离,也会出错。

我的方法不是很优雅,但是也许可以开始考虑如何处理数据了。

数据

set.seed(60007561)

dat <- split(rpois(60, 2), paste0('df_', rep(letters[1:4], each = 15)))

for(i in names(dat)) {
  assign(
    i, 
    data.frame(split(dat[[i]], rep(letters[1:5], each = 3)))
    )
}

# inspect the data

head(
  do.call(
    cbind,
    lapply(
      list(df_a, df_b, df_c, df_d), 
      cbind, 
      data.frame(' ' = rep(' ', 3), check.names = F)
      )
  )
)

#   a b c d e   a b c d e   a b c d e   a b c d e  
# 1 1 2 1 2 3   0 2 1 2 1   5 0 2 2 0   2 5 2 3 3  
# 2 5 0 2 0 3   2 5 1 2 3   0 0 4 2 2   3 1 1 1 2  
# 3 3 2 1 3 0   4 2 0 2 2   0 3 1 2 0   2 2 5 1 4 

溶出度

做两个tibbles的列a...e,其中每个列中包含的列的数据帧x, y对应于从数据帧中的数据df_adf_b; df_cdf_d分别。第一个合成的三角形对应于点,第二个斜度对应于点

df_ab <- as_tibble(lapply(map2(df_a, df_b, ~ list(x = .x, y = .y)), as.data.frame))
df_cd <- as_tibble(lapply(map2(df_c, df_d, ~ list(x = .x, y = .y)), as.data.frame))
#df_ab
# # A tibble: 3 x 5
#     a$x    $y   b$x    $y   c$x    $y   d$x    $y   e$x    $y
#   <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
# 1     1     0     2     2     1     1     2     2     3     1
# 2     5     2     0     5     2     1     0     2     3     3
# 3     3     4     2     2     1     0     3     2     0     2
#
#df_cd
# # A tibble: 3 x 5
#     a$x    $y   b$x    $y   c$x    $y   d$x    $y   e$x    $y
#   <int> <int> <int> <int> <int> <int> <int> <int> <int> <int>
# 1     5     2     0     5     2     2     2     3     0     3
# 2     0     3     0     1     4     1     2     1     2     2
# 3     0     2     3     2     1     5     2     1     0     4

从计算之间的欧几里德距离从数据数据

distances <- map2_df(
  df_ab,
  df_cd,
  ~ sqrt((.x$x - .y$x)^2 + (.x$y - .y$y)^2)
)

#distances
# # A tibble: 3 x 5
#       a     b     c     d     e
#   <dbl> <dbl> <dbl> <dbl> <dbl>
# 1  4.47  3.61  1.41  1     3.61
# 2  5.10  4     2     2.24  1.41
# 3  3.61  1     5     1.41  2   

请注意,上表表示从列a ... e的每个点到第一个表的距离,到第二个表中的相应点的距离

绘制列的距离a(以验证方法或只是为了好玩):

sgms <- data.frame(
  x    = df_a$a,
  y    = df_b$a,
  xend = df_c$a,
  yend = df_d$a,
  l    = round(distances$a, 1)
  ) %>%
  mutate(lx = (x + xend) / 2, ly = (y + yend) / 2)

ggplot(data = sgms, aes(x = x, y = y, xend = xend, yend = yend)) +
  geom_segment(lty = 3, arrow = arrow(10, ,'closed', ends = 'last')) +
  geom_label(aes(x = lx, y = ly, label = l)) +
  geom_point(aes(x = x, y = y), pch = 21, size = 3.5) +
  geom_text(aes(x = x, y = y, label = sprintf('(%d, %d)', x, y)), vjust = 2) +
  geom_point(aes(x = xend, y = yend), pch = 22, size = 3.5) +
  geom_text(aes(x = xend, y = yend, label = sprintf('[%d, %d]', xend, yend)), vjust = -2) +
  expand_limits(y = c(-.5, 5.5), x = c(-.5, 5.5)) +
  ggtitle('Distances btw df_ab, df_cd; col. a') +
  ggthemes::theme_tufte()

dist

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

计算宽数据框中每对坐标之间的距离

来自分类Dev

计算数据框中的点之间的最小距离

来自分类Dev

计算多组坐标之间的距离

来自分类Dev

根据计算出的坐标之间的距离选择数据

来自分类Dev

Distm函数,用于计算R中坐标之间的距离

来自分类Dev

如何计算数据框中两个连续点之间的距离和角度?

来自分类Dev

计算存储在数据框中的轮廓之间的欧式距离。使用一行作为参考

来自分类Dev

如何计算数据框中两个连续点之间的距离和角度?

来自分类Dev

计算数据框中两个纬度与经度之间的距离

来自分类Dev

计算两个不同分组数据帧中位置点之间的最大距离

来自分类Dev

如何计算数据框中行之间的距离并创建矩阵

来自分类Dev

python数据框中站点之间的距离计算

来自分类Dev

通过原子坐标计算原子之间的距离

来自分类Dev

计算坐标之间的距离并插入光泽

来自分类Dev

通过原子坐标计算原子之间的距离

来自分类Dev

通过坐标计算 GPS 点之间的距离

来自分类Dev

如何计算列名中具有相似模式的不同数据框中的列之间的差异?

来自分类Dev

如何计算R中某个阈值以下的2个坐标之间的距离?

来自分类Dev

如何计算带有正负坐标的R中的点之间的距离

来自分类Dev

计算Java中两个地理坐标之间的距离

来自分类Dev

计算熊猫数据框中的不同单词

来自分类Dev

计算熊猫数据框中的不同值

来自分类Dev

如何计算不同数据框的列之间的数值差?

来自分类Dev

给定两组坐标,如何计算它们之间的距离?

来自分类常见问题

计算两个坐标之间的距离的功能

来自分类Dev

如何遍历坐标列表并计算它们之间的距离?

来自分类Dev

计算后续成对坐标之间的累积欧式距离

来自分类Dev

计算两个GPRS坐标之间的距离

来自分类Dev

计算与坐标数组的距离

Related 相关文章

  1. 1

    计算宽数据框中每对坐标之间的距离

  2. 2

    计算数据框中的点之间的最小距离

  3. 3

    计算多组坐标之间的距离

  4. 4

    根据计算出的坐标之间的距离选择数据

  5. 5

    Distm函数,用于计算R中坐标之间的距离

  6. 6

    如何计算数据框中两个连续点之间的距离和角度?

  7. 7

    计算存储在数据框中的轮廓之间的欧式距离。使用一行作为参考

  8. 8

    如何计算数据框中两个连续点之间的距离和角度?

  9. 9

    计算数据框中两个纬度与经度之间的距离

  10. 10

    计算两个不同分组数据帧中位置点之间的最大距离

  11. 11

    如何计算数据框中行之间的距离并创建矩阵

  12. 12

    python数据框中站点之间的距离计算

  13. 13

    通过原子坐标计算原子之间的距离

  14. 14

    计算坐标之间的距离并插入光泽

  15. 15

    通过原子坐标计算原子之间的距离

  16. 16

    通过坐标计算 GPS 点之间的距离

  17. 17

    如何计算列名中具有相似模式的不同数据框中的列之间的差异?

  18. 18

    如何计算R中某个阈值以下的2个坐标之间的距离?

  19. 19

    如何计算带有正负坐标的R中的点之间的距离

  20. 20

    计算Java中两个地理坐标之间的距离

  21. 21

    计算熊猫数据框中的不同单词

  22. 22

    计算熊猫数据框中的不同值

  23. 23

    如何计算不同数据框的列之间的数值差?

  24. 24

    给定两组坐标,如何计算它们之间的距离?

  25. 25

    计算两个坐标之间的距离的功能

  26. 26

    如何遍历坐标列表并计算它们之间的距离?

  27. 27

    计算后续成对坐标之间的累积欧式距离

  28. 28

    计算两个GPRS坐标之间的距离

  29. 29

    计算与坐标数组的距离

热门标签

归档