Есть ли способ запустить сразу несколько двух и из точек данных в R с помощью ggmap mapdist? - PullRequest
1 голос
/ 05 августа 2020

В настоящее время у меня есть набор данных с моими данными в формате широты и долготы. Например, данные в столбце до выглядят как «46.40267091 + -117.04417». Данные во втором столбце выглядят одинаково.

Используя ggmap, я могу индивидуально запустить свой код для каждого местоположения, в котором я пытаюсь вычислить расстояние.

mapdist("46.3957 +-117.0622","46.40267091+-117.04417",mode = "driving")

from                   to                         m    km miles seconds minutes  hours mode   
  <chr>                  <chr>                  <int> <dbl> <dbl>   <int>   <dbl>  <dbl> <chr>  
1 46.3957 +-117.0622 46.40267091+-117.04417  2183  2.18  1.36     217    3.62 0.0603 driving

Мне сложно работать все мои данные сразу, так как у меня есть 736 строк данных, которые мне нужно обработать. Есть ли быстрый способ сделать это вместо того, чтобы идти по одному, что может привести к ошибкам?

Ваша помощь приветствуется

1 Ответ

0 голосов
/ 07 августа 2020

Как и было обещано, вот один из способов добиться желаемого с помощью R. Я сделал это в Jupyter Lab, но это ничего не изменит. Вот код:

Получить данные To / From:

    df_t <- read.csv("C:/python/R_files/Stackoverflow/To.csv")
    df_f <- read.csv("C:/python/R_files/Stackoverflow/From.csv")
    head(df_t, 2)
    head(df_f, 2)

Вывод: (Хорошо выглядит)

    A data.frame: 2 × 1
    To
    <fct>
    1   "46.40267091 - 117.04417"
    2   "46.40267091 - 117.04417"
    A data.frame: 2 × 1
    From
    <fct>
    1   "46.406333- 117.049925"
    2   "46.395726- 117.062265"

Затем я объединил два фрейма данных в один фрейм данных. Ваши данные могут уже быть объединены следующим образом.

    df <- data.frame(from = c(df_f), to = c(df_t))
    df

Вывод: (выглядит хорошо)

    A data.frame: 6 × 2
    From                      To
    <fct>                     <fct>
    "46.406333- 117.049925" "46.40267091 - 117.04417"
    "46.395726- 117.062265" "46.40267091 - 117.04417"
    "46.306254- 119.27897"  "46.2342797 - 119.2329393"
    "46.275479- 119.301406" "46.2342797 - 119.2329393"
    "46.281562- 119.293819" "46.2342797 - 119.2329393"
    "46.288286- 119.284903" "46.2342797 - 119.2329393"

И, наконец, создайте функцию и подмножество to / from. Получите данные:

    dist <- apply(df, 1, function(x){
                   mapdist( x["From"], x["To"]     )
                 })
    
    dist   # run the function

Вы захотите построить точки. Я никогда не наносил данные на график, чтобы увидеть, имеют ли данные или результаты какой-либо смысл.

Вывод - щелкните ссылку: ( Правильно !)

...