You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于df2的坐标提取df1中的预测值以对比预期与观测值

解决方法

你需要根据Lat和Long两个坐标列作为匹配键,把df1中的var1.predicted值对应到df2里,以下是几种可靠的实现方式:

方法1:Base R的merge函数

这是最基础的内置方法,无需额外安装包:

# 按Lat和Long匹配,只保留df2的所有行(all.x=TRUE)
df_combined <- merge(df2, df1, by = c("Lat", "Long"), all.x = TRUE)
# 把匹配到的var1.predicted重命名为Expected(可选)
names(df_combined)[names(df_combined) == "var1.predicted"] <- "Expected"

方法2:tidyverse/dplyr的left_join

如果你习惯用tidyverse风格的代码,这个方法更直观:

# 先加载dplyr包(如果没安装先运行install.packages("dplyr"))
library(dplyr)

df2 <- df2 %>%
  # 只保留df1中需要的匹配列和目标列
  left_join(df1 %>% select(Lat, Long, var1.predicted), 
            by = c("Lat", "Long")) %>%
  # 重命名列
  rename(Expected = var1.predicted)

方法3:Base R的match索引

通过拼接坐标字符串生成匹配索引,适合对索引逻辑熟悉的用户:

# 生成坐标唯一标识字符串,用于匹配
df2_coords <- paste(df2$Lat, df2$Long, sep = "_")
df1_coords <- paste(df1$Lat, df1$Long, sep = "_")

# 找到df2坐标在df1中的位置索引
match_pos <- match(df2_coords, df1_coords)

# 提取对应的值到df2
df2$Expected <- df1$var1.predicted[match_pos]

原代码报错原因

df1[as.matrix(df2)]的索引逻辑完全错误:as.matrix(df2)会把整个df2转换成数值矩阵,用它去索引df1时,R会把矩阵里的每个值当成行/列的位置编号,这和你要的"按坐标匹配"逻辑完全不符,自然会因为索引超出范围报错。

运行上述任意一种方法后,你的df2会得到预期结果:

LatLongobservedExpected
1300.8
2410.9

内容的提问来源于stack exchange,提问作者KMont

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:12:56