我模拟了在线零售市场的数据集。客户可以在德国的不同商店(例如慕尼黑,柏林,汉堡......)和网上商店购买他们的产品。要从城市获取纬度/经度数据,我使用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
有没有办法获取这些随机纬度/经度数据并将其整合到我的数据框中?
答案 0 :(得分:2)
你的问题是双重的。首先,作为R的新手,你还没有习惯于做你需要的语义。从根本上说,你要求做的是:
首先,要识别符合条件的数据框元素,请使用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
中取样以获得适当的精度。祝好运!