2017-02-27 4 views
2

私はオンライン小売市場向けのデータセットをシミュレートしました。顧客は、ドイツのさまざまな店舗(ミュンヘン、ベルリン、ハンブルクなど)とオンラインストアで商品を購入できます。都市からの緯度/経度データを取得するには、geocodeggmap packageから使用します。しかし、オンラインで購入する顧客は、全国各地で購入することができます。今度は、オンラインでの購入のためにドイツ国内でランダムな緯度/経度データを生成し、後で光沢のあるリーフレットでマッピングしたいと考えています。これを行う方法はありますか?これらのランダムな緯度/経度データを取得し、統合する方法はありランダムに緯度/経度データを取得するR

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

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

しかし、私の目的は、このような例のためのデータフレームである:

私のDFは、このようになりますそれは私のデータフレームに?

+0

ポイントが実際にドイツにある場合は気になりますか?あなたは国の周りの箱に収まる緯度/経度の範囲を得ることができ、 'sample'を使ってその範囲内のランダムな値を得ることができます。または、関数を記述して、既知の領域(すなわち、ミュンヘンから100km)の周りの円の半径にランダムな緯度/経度を返します。 –

+0

ありがとうございました!ドイツにいれば、とても役に立ちます。小売業者はドイツに住んでいたので。私はあなたのような同様のアイデアを持っていましたが、私はこれをRでどのようにコードするのか分かりません(初心者です)。この乱数を生成することができれば、どうすればこれらの数値がオンラインストアに含まれるようにすることができますか? – Marre

+0

http://www.dpi.inpe.br/gilberto/tutorials/software/R-contrib/sp/html/spsample.html – MichaelChirico

答えて

1

あなたの問題は二重です。まず、Rの入門者として、あなたが必要とすることを行うために必要なセマンティクスにはまだ慣れていません。基本的に、何をするために求めていることは次のとおりです。

  • まずは、
  • セカンドオンライン
  • から供給される受注確認し、これらの注文のランダムな緯度と経度を生成

まず、基準に適合するデータフレームの要素を特定するには、which関数を使用します。したがって、は「オンライン」に等しいストアの列を持つデータフレーム内の行を見つけるために、あなたは:

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

LATまたは特定の行の経度を更新するには、私たちのことができるようにする必要があります列にアクセスします。特定の列の値を取得するには、$を使用します。たとえば、オンライン注文のラウンド値を取得するには、

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

素晴らしいです!問題は今や発散し、複雑さが増しています。新しい値については、デモを達成するための単純な値を生成したいのですか、または特定の領域で空間的な結果を生成する新しいロジックを考え出したいですか?ただし、ドイツでデータポイントを生成する場合は、この問題の対象外です。ここでは、境界ボックス内の値を生成し、それに応じてdata.frameを更新する簡単な例を検討します。

与えられた範囲で整数値を生成するには、sample関数を使用できます。あなたは私たちが次の操作を行うことができます14に45と55の範囲でlat値と9の範囲でlon値を望むと仮定すると:

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"))) 

このコードを読んで、私たちはそのdflat値を更新しています適切な長さ(「オンライン」注文の数)である48:52の乱数ベクトルの「オンライン」注文です。

小数精度をさらに増やしたい場合は、runif関数と同様のロジックを使用して一様分布をサンプルし、roundを使用して適切な精度を得ることができます。がんばろう!

関連する問題