2017-09-10 6 views
2

ggmapパッケージを使用して宛先アドレスの距離をアドレスリストで計算しようとしています。 CSVでの私のデータを以下のようになります。Rメッセージ:エラー - 置換にはx行があり、データにはyがあります

Order ID Address 
1652049 435 E 70TH ST,10021 
1652123 1365 YORK AVE,10021 
1652053 530 E 72ND ST,10021 

ので、私は、例えば、これらすべてのアドレスに自分の入力アドレスからの距離を取得しよう:400ハドソンセント、10013、およびIはRのコードを次ています

library(ggmap) 
mydata<-read.csv("address.csv") 
mydata$Address<-as.character(mydata$Address) 
mydata$Distance<-NA 
a<-c("289 Hudson St,10013") 
mydata$Distance<-mapdist(mydata$Address,a)$miles 

コードは私に次のようにエラーメッセージを与えしかし:

Error in `$<-.data.frame`(`*tmp*`, "Distance", value = c(8.2403854, 8.2403854, : 
    replacement has 53 rows, data has 31 
+1

再現可能な例(データあり)を提供できますか? –

+0

Sry、Cyrus私はどのようにファイルをアップロードするのかわかりませんが、それは単純なエクセルcvsファイルは2つの列を持って、1つはidsであり、もう1つはアドレスです。 –

答えて

2

は、必ず列名にスペースを持っていないしてください。 「Order ID」という名前の代わりに「Order_ID」のようなものを使用してください。また、独自の個別の文字列として各アドレスを持っている:

library(ggmap) 

mydata$Address<-as.character(mydata$Address) 
mydata$Distance<-NA 
a<-c("289 Hudson St,10013") 
mydata$Distance<-mapdist(mydata$Address,a)$miles 

出力:

Order_ID    Address Distance 
1 1652049 435 E 70TH ST,10021 8.240385 
2 1652123 1365 YORK AVE,10021 8.475275 
3 1652053 530 E 72ND ST,10021 8.618197 

サンプルデータ:

mydata <- data.frame(Order_ID=c(1652049,1652123,1652053), 
        Address=c('435 E 70TH ST,10021','1365 YORK AVE,10021', 
           '530 E 72ND ST,10021')) 

EDIT:

なお、上記のデータで各アドレスは、ベクトルc()内のそれ自身の文字列です。各アドレスの前後に一重引用符を使用することで、これが当てはまります。これを行う理由は、カンマで区切られた列を持つCSVファイルを使用する場合にデータが混ざらないようにするためです。上のアドレス欄のような列にカンマを持つRにCSVファイルを読み込む前に、その列の各値/セルが完了したとおりに(つまり一重引用符で囲まれている)固有の文字列として保存されていることを確認してください。

+0

ありがとうございます。私は1つの文字列means.Inあなたの例では、これらのアドレスを組み合わせるベクトルを使用するが、私の入力は1つの文字列として考慮していない任意のアイデア、cvsファイルからデータを読み取っているかわからない? –

+0

@WorstSQLNoob - 良い質問です。上記の説明を追加する編集を参照してください。 – www

+0

こんにちはRyan、私は問題を発見した。私のデータでは、私は異なるorder_idのために同じアドレスを持っている、それは私にエラーを与えるだろう。しかし、私はそれらの重複アドレスを削除した場合、私の元のコードはうまく動作します。 –

関連する問題