I am trying to compare columns from two different tibbles to find the corresponding row in dat2
to fill. However, I keep getting a integer(0)
result for the second part of the which function. The two tibbles contain columns of lon, lat, values/0, where values from the first data frame dat
will fill the full-length tibbledat2
based on matching lon and lat values.
dat
originates from a .nc file that was opened using: raster::brick
. Where after I treated it like a raster and aggregated the data to be on a 1x1 degree spacing, I made sure that the lon and lat columns were the same data class and numeric values. For example, dat$lon
ceiling(-179.5) to get -179 matching dat2$V1
and 0.25 was added to dat$lat
to get the same values of dat2$V2
. Then applying the which()
.
The which()
line in question:
which(dat$lon[k] == dat2$V1 & dat$lat[k] == dat2$V2)
I was able to get the first part of the which statement to work, when testing it individually. However, the second statement has been tripping me up for a bit now now.
Header of 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
Head of 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
Row 1 of dat
should correspond with row 60039 of dat2
:
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
I was getting this issue previously but was able to find a different, more efficient workaround. However, this time I am at a loss for a workaround that will work and/or solving this issue. I think it is a data type issue that is inherited from the raster data. Even though class()
is numeric for the columns in question. ceiling()
results in it working but + 0.25
does not.
I have tried to apply unlist()
and as.numeric()
to the dat$lat
column and I have also tried trimws()
on a whim from this previous question. All to no avail.
Most recently tested the floating point as suggested. Both all.equal(dat$lat[1], 76.5)
and all.equal(dat2$V2[60039], 76.5)
result in TRUE
. Still, which()
does not work. And:
all.equal(dat$lat[1], dat2$V2[60039])
[1] TRUE