2017-09-25 36 views
0

我有具有重複緯度/長度的數據行,我想包含一個包含所有分組列數據的標籤。R小冊子地圖:在標籤彈出框中包含多行數據

# Make sample dataframe 
long <- c(147.5, 147.5, 147.5, 147, 147) 
lat <- c(-36.5, -36.5, -36.5, -36, -36) 
label <- c(1, 1, 2, 1, 2) 

markers <- data.frame(lat,long,label) 

# Combine labels based on lat long 
markers <- markers %>% 
    group_by(lat, long) %>% 
    summarize(concat_label = toString(label)) 

# Markers with all of the labels 
leaflet() %>% 
    addTiles() %>% 
    addMarkers(lng=markers$long, lat= markers$lat, 
      popup= markers$concat_label 
) 

是否有toString的版本使用換行而不是逗號?我試圖使用粘貼和paste0,但無法使其工作。

回答

0
# Make sample dataframe 
long <- c(147.5, 147.5, 147.5, 147, 147) 
lat <- c(-36.5, -36.5, -36.5, -36, -36) 
label <- c(1, 1, 2, 1, 2) 

markers <- data.frame(lat,long,label) 

# Aggregate method 
markers <- aggregate(label ~ lat + long, markers, paste, collapse = "<br/>") 

# Markers with all of the labels 
leaflet() %>% 
    addTiles() %>% 
    addMarkers(lng=markers$long, lat= markers$lat, 
      popup= markers$label 
) 

這個問題有了答案: Collapse/concatenate/aggregate a column to a single comma separated string within each group

0

您的標籤變量可以是HTML字符串,因此您可以使用<br/>標籤將標籤堆疊在一起。例如:

library(leaflet) 

long <- c(147.768, 147.768, 147.768,147.768, 147.768, 147.768) 
lat <- c(-36.852, -36.852, -36.852,-36.852, -36.852, -36.852) 
label <- paste(sep = "<br/>",'long label1', 'long label2', 'long label3','long label4', 'long label5', 'long label6') 

markers <- data.frame(lat,long,label) 


leaflet() %>% 
    addTiles() %>% 
    addMarkers(lng=markers$long, lat= markers$lat, 
      popup=markers$label, 
) 

您還可以喂到的變量使用相同的方法標籤 - 串聯行由行。

+0

有沒有辦法做到這一點沒有改變底層數據框的結構?我有很多經緯度,所以不想爲每個經緯度手動創建標籤。 – Erin

+0

我的示例使用了您提供的示例數據框,但不需要爲每個經緯度手動創建標籤。 Leaflet的'addMarkers'逐行添加標記,因此可以輕鬆地爲每行生成單獨的標記和標籤 - 只需爲要串接的字符串使用變量即可。例如:假設你對每個觀測都有一個緯度/長度的變量,這些變量也描述了諸如'detail1','detail2','detail3'等的觀察結果,你可以按照上面的相同的方式將它們組合:'label < - 粘貼(sep =「
」,detail1, detail2,detail3)''。 – dshkol

+0

另外,除非有特定原因需要重複座標,否則您應該對每個經緯座標進行一次觀察。我真的不明白你的問題的一部分。 – dshkol

相關問題