无效下标类型“列表”错误并比较两个数据帧之间的点之间的距离

问题描述 投票:0回答:1

我有两个存储点数据的数据框。一个包含 6 个点 (df1.sf),另一个包含 20,000 多个点 (df2.sf)。我想计算 df2 中的每个点与 df1 中的每个点之间的距离(一对多,重复六次),然后生成某种输出,指示 df1 中的 6 个点中哪一个最接近每个点df2 的点。这是我到目前为止所得到的:

dist <- function(a){
                 dt <- data.table(as.numeric(sf::st_distance(df1.sf$borderpoints, a)))
                 return(which.min(dt$V1))}
results <- df2.sf[, j = list(Closest =  dist(df2.sf)), by = 1:nrow(df2.sf)]

Error in .subset(x, j) : invalid subscript type 'list'

但这一直给我“.subset(x, j) 中的错误:无效的下标类型“列表””。我对 R 很陌生,所以怀疑我做错了什么 - 非常感谢任何提示,无论是如何修复下面的代码,还是有更好的方法来处理问题。

r data.table spatial
1个回答
0
投票

在这里,我为您提供了一个可重现的示例,展示了如何计算

dat_p2
dat_p1
中每个值之间的绝对差异,然后以包含每个
p2_label
中差异最小的观察值的小标题结尾(请注意,可以有多个)。

library(tidyverse)

set.seed(345)

dat_p1 <- tibble(
  p1_label = LETTERS[1:6],
  p1_val = round(runif(6, 1, 30))
)

dat_p2 <- tibble(
  p2_label = 1:15,
  p2_val = round(runif(15, 1, 30))
)

crossing(dat_p1, dat_p2) %>% 
  mutate(diff_abs = abs(p2_val - p1_val)) %>% 
  group_by(p2_label) %>% 
  filter(diff_abs == min(diff_abs)) %>% 
  ungroup() %>% 
  arrange(p2_label)
© www.soinside.com 2019 - 2024. All rights reserved.