【问题标题】:Is there a way I can run multiple two and from data points at once in R using ggmap mapdist?有没有一种方法可以使用 ggmap mapdist 在 R 中一次运行多个两个数据点?
【发布时间】:2023-04-01 07:16:01
【问题描述】:

我目前有一个数据集,其中包含纬度和经度格式的数据。 例如,列中的数据看起来像“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 行数据需要处理。有没有一种快速的方法可以做到这一点,而不是一个一个地去,这容易出错?

感谢您的帮助

【问题讨论】:

  • 我想你正在使用谷歌地图 API ?如果是这样,那么除了一次通过一个命令(代码行)之外,我还没有找到任何通过 Google API 运行代码的方法。当然,这可以通过循环来完成,但它仍然是一次一行代码。 Google 地图 API 提供的免费数据不超过其定义的限制。达到这些限制后,Google 将按照规定的费率从您的信用卡中收取费用。当 Google 按单个增量处理使用情况时,Google 很可能可以更轻松地监控用户的 API 使用情况并为其计费。如果设置,代码将在用户定义的限制处停止。
  • 你知道可以使用什么循环吗?我与他们提到的其他人交谈过,他们提到尝试使用 dplyr 作为一种自己单独运行每一行的方法。
  • 嗨。所以现在我明白你想要做什么了。这实际上很容易。一会儿我会把代码发给你。
  • 嗨。你的数据是什么样的?你有数据框吗?一个列表?或者是什么?如果您可以添加数据源的部分示例,则可以轻松回答此问题。
  • 嗨。是的,我有一个数据框。让我们称之为测试。然后我有一个 To 列和 From 列,每列中的数据排列为 LAT+LONG。

标签: r distance ggmap


【解决方案1】:

正如所承诺的,这是使用 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

您将要绘制点。我从来没有绘制数据来查看数据或结果是否有意义。

输出 - 点击链接:(Just right!)

【讨论】:

  • 谢谢!你帮了大忙。我要试一试。
  • 我希望代码对你有用。有机会时,请在答案旁边点击“向上箭头”。问候,
猜你喜欢
  • 1970-01-01
  • 2022-06-11
  • 2018-12-27
  • 2022-01-18
  • 1970-01-01
  • 2010-09-24
  • 2013-10-12
  • 1970-01-01
  • 2020-06-07
相关资源
最近更新 更多