#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)