R语言中which()函数对比数值型tibble时失效问题求助
浮点数匹配异常:which()无法匹配lat列但all.equal返回TRUE
我需要将tibble对象dat中的数值填充到全量的dat2中,匹配规则是基于lon和lat列。但使用which()函数时,纬度匹配的条件始终返回integer(0),导致无法找到对应行。
数据背景
dat由raster::brick读取.nc文件后处理得到,已聚合为1x1度分辨率- 为匹配
dat2的坐标:对dat$lon用ceiling(-179.5)处理,得到与dat2$V1一致的整数经度;对dat$lat加0.25,以匹配dat2$V2的纬度值 - 确认两表中涉事列的类型均为
numeric
涉事代码
which(dat$lon[k] == dat2$V1 & dat$lat[k] == dat2$V2)
单独测试dat$lon[k] == dat2$V1可正常返回匹配行,但dat$lat[k] == dat2$V2始终无匹配结果。
数据示例
dat表头
head(dat) # A tibble: 6 × 3 lon lat V3 <dbl> <dbl> <dbl> 1 -82 76.5 179 2 -95 75.5 9 3 -94 75.5 44 4 -95 74.5 15 5 -94 74.5 177 6 -85 73.5 848
dat2表头
head(dat2) # A tibble: 6 × 3 V1 V2 V3 <dbl> <dbl> <dbl> 1 0 -89.5 0 2 1 -89.5 0 3 2 -89.5 0 4 3 -89.5 0 5 4 -89.5 0 6 5 -89.5 0
对应行示例
dat第1行应匹配dat2第60039行:
dat2[60037:60040,] # A tibble: 4 × 3 V1 V2 V3 <dbl> <dbl> <dbl> 60037 -84 76.5 0 60038 -83 76.5 0 60039 -82 76.5 0 60040 -81 76.5 0
已尝试的解决方案
- 对
dat$lat使用unlist()、as.numeric()强制转换类型 - 尝试
trimws()处理(虽无字符型数据) - 浮点数验证:
all.equal(dat$lat[1], 76.5)、all.equal(dat2$V2[60039], 76.5)、all.equal(dat$lat[1], dat2$V2[60039])均返回TRUE,但which()仍无法匹配。
内容的提问来源于stack exchange,提问作者tannie
相关产品推荐
相关产品推荐

