Используя leaflet
, я пытаюсь построить несколько строк и установить их цвет на основе переменной скорости. Мои данные начинаются с уровня кодированной полилинии (т. Е. Серии lat/long points, закодированной как буквенно-цифровая строка) с одним значением скорости для каждой EPL.Создание SpatialLinesDataFrame из объекта SpatialLines и базового df
Я могу декодировать полилинии для получения длинной/длинной серии (спасибо Max, here), и я могу создавать сегменты из этих серий точек и отформатировать их как объект (спасибо Kyle Walker, here).
Моя проблема: я могу правильно построить линии, используя leaflet
, но я не могу присоединиться к объекту SpatialLines к базовым данным, чтобы создать SpatialLinesDataFrame, и поэтому я не могу закодировать цвет линии на основе скорости var. Я подозреваю, что проблема заключается в том, что идентификаторы, которые я назначаю сегментам SL, не соответствуют тем, которые присутствуют в базовом df.
Объектами я пытался присоединиться, с SpatialLinesDataFrame()
:
"sl_object", в объекта с ~ 140 наблюдений, по одному для каждого сегмента; Я использую код Кайла, связанный выше, с одним ключевым изменением - вместо создания произвольного итеративного значения ID для каждого сегмента я вытягиваю связанный идентификатор из своих базовых данных. (Или, по крайней мере, я пытаюсь.) Итак, я заменил:
id <- paste0("line", as.character(p))
с
lguy <- data.frame(paths[[p]][1]) id <- unique(lguy[,1])
"speed_object", ДФ с ~ 140 наблюдениями одна скорость var и
row.names
установлена на тот же идентификатор var, который, как я думал, я создал в объекте SL выше. (Число наблюдений никогда не будет превышать, но может быть меньше, чем число сегментов в объекте SL.)
Мой присоединения Код:
splndf <- SpatialLinesDataFrame(sl = sl_object, data = speed_object)
И результат:
row.names of data and Lines IDs do not match
Спасибо, все. Я публикую это частично, потому что я видел некоторые подобные вопросы, в том числе некоторые, относящиеся конкретно к изменению вывода ID отличного инструмента Kyle, и не смогли найти хороший ответ.
EDIT: Включая образцы данных.
С sl_obj, один сегмент:
print(sl_obj)
Slot "ID":
[1] "4763655"
[[151]]
An object of class "Lines"
Slot "Lines":
[[1]]
An object of class "Line"
Slot "coords":
lon lat
1955 -74.05228 40.60397
1956 -74.05021 40.60465
1957 -74.04182 40.60737
1958 -74.03997 40.60795
1959 -74.03919 40.60821
И соответствующая запись из speed_obj:
row.names speed
... ...
4763657 44.74
4763655 34.8 # this one matches the ID above
4616250 57.79
... ...
Являются ли идентификаторы линий итеративными при построении кадра данных? Насколько я знаю, имена row.names назначаются во время создания, в то время как идентификаторы строк будут ссылаться на элемент в наборе данных линии. Можно ли разместить фрагмент этих данных или ссылку, где мы можем найти похожие данные? Я хочу сказать 'dput()' данные, но я никогда не делал этого с пространственными строками, поэтому я не уверен, как это будет реагировать. – Badger
Нет - идентификаторы, с которыми я пытаюсь присоединиться, представляют собой семизначный ключ, который однозначно идентифицирует сегменты. Я назначаю их явно как «row.names» для объекта speed_object в его создании, и мое изменение в коде Kyle выше предназначалось для их переноса из исходного набора данных. Будет включать некоторые образцы данных в редактировании прямо сейчас. –
О, я вижу это, когда перечитываю ваш вопрос, извините. По какой причине вы используете 'row.names' для назначения? Я чувствую, что вы можете сделать строки 'sldf', а затем' match() 'идентификатор присваивает скорости, где совпадают идентификаторы. – Badger