在R中随机获取纬度/经度数据

时间:2017-02-27 04:45:43

标签: r google-maps random numbers geocoding

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

我的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

有没有办法获取这些随机纬度/经度数据并将其整合到我的数据框中?

1 个答案:

答案 0 :(得分:2)

你的问题是双重的。首先,作为R的新手,你还没有习惯于做你需要的语义。从根本上说,你要求做的是:

  • 首先,确定哪些订单来自在线
  • 第二次,为这些订单生成随机的lat和lon

首先,要识别符合条件的数据框元素,请使用which函数。因此,要查找数据框中的行 使商店列等于"在线",您可以:

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

要更新特定行的lat或lon,我们需要能够访问该列。要获取特定列的值,我们使用$。例如,要获取您使用的在线订单的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")))

阅读此代码后,我们更新了lat中的df值,这些值是&#34;在线&#34;从48:52开始的随机数向量的订单,这是正确的长度(&#34;在线&#34;订单的数量)。

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