library("data.table")
data_sejima <- fread("https://raw.githubusercontent.com/dichika/mydata/master/sejima.csv",
                        data.table=FALSE)
library("dplyr")
## 
## Attaching package: 'dplyr'
## 
##  以下のオブジェクトは 'package:data.table' からマスクされています: 
## 
##      between, last 
## 
##  以下のオブジェクトは 'package:stats' からマスクされています: 
## 
##      filter, lag 
## 
##  以下のオブジェクトは 'package:base' からマスクされています: 
## 
##      intersect, setdiff, setequal, union
data_sejima <- bind_rows(data_sejima,
                         data_frame(year = 2015,
                                    name = "ブルーボトルコーヒー",
                                    address = "東京都港区南青山3-13-14",
                                    memo = "お茶")
)
data_sejima <- bind_rows(data_sejima,
                         data_frame(year = 1914,
                                    name = "東京駅",
                                    address = "千代田区丸の内1-9-1",
                                    memo = "スタート地点")
)
# ジオコーディング

getLocation <- function(x){
  require("httr")
  tmp <- content(GET(x), "parsed")
  res <- data_frame(
    lat=tmp$results[[1]]$geometry$location$lat,
    lng=tmp$results[[1]]$geometry$location$lng
    )
}

adds <- data_sejima$address
qs <- paste0("http://maps.googleapis.com/maps/api/geocode/json?address=", adds)

locs <- NULL
for(q in qs){
  locs <- bind_rows(locs, getLocation(q))
  Sys.sleep(1) # 使用制限にひっかからないように1秒待つ
  }
## Loading required package: httr
data_sejima <- bind_cols(data_sejima, locs)
library("TSP")

data_dist <- ETSP(data_sejima[,c("lat","lng")])

res <- NULL
for(m in c("identity", "random",
           #nearest_insertion","cheapest_insertion","farthest_insertion","arbitrary_insertion"", 
           "nn", "repetitive_nn", "two_opt")){
  tmp <- solve_TSP(data_dist, 
                   method = m,
                   control=list(start=9)) # start地点の行を指定
  res <- bind_rows(res, data_frame(method=attr(tmp, "method"),
                                   tour_length=attr(tmp, "tour_length")))
}
res_nn <- solve_TSP(data_dist,
                    method = "nn",
                    control=list(start=9))
data_order <- as.integer(res_nn) # 回る順番
data_sejima <- data_sejima[data_order,] # 並べ替え

library(DT)
DT::datatable(data_sejima)

library(leaflet)
leaflet(data_sejima) %>% 
  addCircleMarkers(lat = ~lat, 
             lng = ~lng,
             popup=~name,
             radius = 10) %>%
  addPolylines(lat =~lat,
               lng = ~lng) %>% 
  addPopups(data=data_sejima[range(seq(nrow(data_sejima))),],
             lat= ~lat, 
             lng= ~lng,
             popup=data_sejima$name[range(seq(nrow(data_sejima)))],
            options=popupOptions(minWidth=10)
             ) %>% 
  addTiles()

少しいじってます。 addCircleMarkersの座標を結ぶだけなので、上記のでOKです。

あと、addPopups()のところで行を選択するのに、dplyr::filterとかも使えるので、そっちの方が楽うかもしれないです…。

https://rpubs.com/kazutan/typhoon5