Я пытаюсь классифицировать записи в таблице на основе их местоположения. Я разделил область на 9 квадратов одинаковой ширины и равной высоты (ширина! = Высота) и хотел бы создать новый столбец, в котором каждой записи присваивается метка, в зависимости от того, в какой квадрат она попадает. Это лучшее, что я мог сделать:
library(tidyverse)
set.seed(123)
latitude = 10*runif(100)
longitude = 10*runif(100)
locations = data.frame(latitude, longitude)
max_lat <- max(locations$latitude)
min_lat <- min(locations$latitude)
max_lng <- max(locations$longitude)
min_lng <- min(locations$longitude)
grid_num_lat <- 3
grid_num_lng <- 3
step_lat <- (max_lat-min_lat)/grid_num_lat
step_lng <- (max_lng-min_lng)/grid_num_lng
locations <- locations %>%
mutate(grp_lat = ifelse(latitude <= (min_lat+step_lat), "A",
ifelse(latitude <= (min_lat+(2*step_lat)), "B",
ifelse(latitude <= (min_lat+(3*step_lat)), "C", "NA")))
, grp_lng = ifelse(longitude <= (min_lng+step_lng), "1",
ifelse(longitude <= (min_lng+(2*step_lng)), "2",
ifelse(longitude <= (min_lng+(3*step_lng)), "3", "NA")))
, grp_loc = paste(grp_lat, grp_lng))
Хотя это работает для моих нынешних целей, обновление кода было бы раздражающим, если бы я хотел разделить область на большее или меньшее количество квадратов. Конечно, есть более простой способ достичь этого?
Заранее спасибо