【问题标题】:Getting randomly latitude/longitude data in R在R中随机获取纬度/经度数据
【发布时间】:2017-07-17 14:35:31
【问题描述】:

我为在线零售市场模拟了一个数据集。客户可以在德国的不同商店(例如慕尼黑、柏林、汉堡......)和在线商店购买他们的产品。要从城市获取纬度/经度数据,我使用来自 ggmap packagegeocode。但是在线购买的客户可以在全国范围内购买。现在我想为在线购买生成德国境内的随机纬度/经度数据,以便稍后用闪亮的传单映射它们。有没有办法做到这一点?

我的 df 看起来像这样:

View(df)
ClientId   Store ... lat   lon
1          Berlin    52    13
2          Munich    48    11
3          Online    x     x  
4          Online    x     x

但我的目标是像这样的数据框:

ClientId   Store ... lat   lon
1          Berlin    52    13
2          Munich    48    11
3          Online    50    12
4          Online    46    10

有什么方法可以获取这些随机的经纬度数据并将其整合到我的数据框中?

【问题讨论】:

  • 您是否关心积分是否真的在德国?您可以获得适合全国范围内的一个盒子的纬度/经度范围,并使用sample 获取该范围内的随机值。或者您可以编写一个函数并让它在您已知区域(即距慕尼黑 100 公里)周围的圆半径内返回随机纬度/经度
  • 感谢您的回答!如果在德国会有帮助。因为零售商在德国定居。我和你有类似的想法,但我不知道如何在 R 中编码(我是新手)。如果我能够生成这个随机数,我怎么能让 R 既然这些数字包含到在线商店?
  • 为那些正在从 shapefiles/WKT/geojson 中寻找随机地理点的未来 SOers 发布此内容(因为这在他们的搜索结果中会很高)github.com/ropensci/randgeo 会为这些人进行随机选择。跨度>

标签: r google-maps random numbers geocoding


【解决方案1】:

您的问题是双重的。首先,作为 R 的新手,你还不习惯做你需要做的事情所需的语义。从根本上说,您要求做的是:

  • 首先,确定哪些订单来自线上
  • 其次,为这些订单生成随机的经纬度

首先,要识别符合标准的数据框元素,请使用which 函数。因此,要在数据框中找到 Store 列等于“在线”的行,您可以:

df[which(df$Store=="Online")]

要更新特定行的纬度或经度,我们需要能够访问该列。要获取特定列的值,我们使用$。例如,要获取您使用的在线订单的 lat 值:

df$lat[which(df$Store=="Online")]

太棒了!现在问题出现了分歧并增加了复杂性。对于新值,您是想生成简单的值来完成您的演示,还是想提出新的逻辑来在给定区域生成空间结果?您表示您希望在德国本身生成数据点,但是,完成此操作超出了此问题的范围。现在,我们将考虑在有界框中生成值并相应地更新您的data.frame 的简单示例。

要生成给定范围内的整数值,我们可以使用sample 函数。假设您希望 lat 的值在 45 和 55 的范围内,lon 的值在 9 到 14 的范围内,我们可以执行以下操作:

df$lat[which(df$Store=="Online")]<-sample(45:55,length(which(df$Store=="Online")))
df$lon[which(df$Store=="Online")]<-sample(9:14,length(which(df$Store=="Online")))

阅读这段代码,我们更新了df 中的lat 值,这些值是“在线”订单,其中包含从48:52 开始的随机数向量,该向量是正确长度(“在线”订单的数量)。

如果您想要更高的小数精度,您可以使用与从均匀分布中采样的runif 函数和round 类似的逻辑来获得适当的精度。祝你好运!

【讨论】:

    猜你喜欢
    • 2019-08-04
    • 2012-07-09
    • 2015-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2016-09-29
    • 1970-01-01
    相关资源
    最近更新 更多