настройка радиуса по nrow в addCircleMarkers, ShinyR, карте листовок

#r #shiny #leaflet

#r #блестящий #листовка

Вопрос:

У меня есть 400 000 строк данных для нескольких городов ( data ). Я хочу визуализировать их местоположение, а также различные свойства с помощью leaflet. Например, я хочу установить размер окружности в зависимости от номера выборки из данного города. Я получаю правильное местоположение, но не могу изменить радиус. Я попробовал это ниже, где CityCoordinateData это df из 3 столбцов: одна строка для всех городов, т. е. Местоположения, их Lon и широты и unique(data$City) имеет те же элементы, что и CityCoordinateData$Location

 m<-leaflet() %>%
      addTiles() %>% 
      setView(20, 47, zoom = 13) %>% 
      addCircleMarkers(CityCoordinateData$Lon, CityCoordinateData$Lat, radius=nrow(data[grep(CityCoordinateData$Location, data$City),])
  

Grep, похоже, использует только nrow первого элемента. Я также пробовал это, оно запускается, но никогда не заканчивается:

 radius=nrow(subdata[grep(paste(CityCoordinateData$Location,collapse = "|"), data$City, value=TRUE),]) 
  

Благодарен за любые советы!

Образец данных может быть смоделирован следующим образом:

 CityCoordinateData <- data.frame(Location=as.factor(c("Dorog", "Eger", "Erd")), Lon=c(17,18,19), Lat=c(40,41,42))
data <- data_sample<-data.frame(City=as.factor(c("Dorog", "Eger", "Erd", "Dorog", "Dorog", "Eger")), Variable=c(11,12,13,14,15,16))
  

Итак, я в этом примере хотел бы, чтобы местоположение «Дорога» было отмечено окружностью с радиусом 3, «Eger» 2 и «Erd» 1.

Комментарии:

1. Сложно ответить без каких-либо примеров данных, но одна проблема, похоже, заключается в том, что ваша команда подмножества возвращает соответствие, для подмножества вам нужна логическая (т. Е. использовать grepl ) или целочисленная позиция соответствия ( value = FALSE )

2. Согласен с @blmoore, выборка ваших данных очень помогла бы.

3. Спасибо за реакцию!! Я пробовал grepl, но по-прежнему для радиуса используется только первый элемент. Я попытался привести пример в исходном сообщении, см. Выше. В этом случае все круги прямо сейчас имели бы радиус 3, чего я не хочу.

4. Мы имеем в виду каким-то образом предоставить образец исходного набора данных, чтобы проблему можно было воспроизвести.

5. Вы должны сопоставить размер радиуса (или любую другую переменную, на самом деле) с переменной через ~ . Например, смотрите примеры здесь .

Ответ №1:

Ваши данные имеют несколько значений для каждого местоположения. В случае, если это правильно, будет несколько кругов на местоположение. Это код, который я пробовал.

 library(leaflet)

CityCoordinateData <- data.frame(Location=c("Dorog", "Eger", "Erd"), 
                                 Lon=c(17,18,19), Lat=c(40,41,42))
data<-data_sample <- data.frame(City=c("Dorog", "Eger", "Erd", "Dorog", "Dorog", "Eger"), 
                                Variable=c(11,12,13,14,15,16))

names(CityCoordinateData)[1] <- c("City")

xy <- merge(CityCoordinateData, data)

leaflet(data = xy) %>%
  addTiles() %>%
  addCircleMarkers(~Lon, ~Lat, radius = ~Variable)
  

введите описание изображения здесь