2016-12-21 32 views
0

データフレームに格納されたデータを使って計算を行う必要があります。このデータフレームの新しい列に結果を置きます。Rのデータフレームの新しい列に新しい値を追加するには?

初期データフレーム:

> str(mydf) 
    'data.frame': 1122 obs. of 6 variables: 
    $ MMSI  : num 2.73e+08 2.73e+08 2.73e+08 2.73e+08 2.73e+08 ... 
    $ MMSI.1  : num 2.73e+08 2.72e+08 2.72e+08 2.72e+08 6.67e+08 ... 
    $ LATITUDE : num 46.9 46.9 46.9 46.9 46.9 ... 
    $ LONGITUDE : num 32 32 32 32 32 ... 
    $ LATITUDE.1 : num 46.9 46.9 46.9 46.9 46.9 ... 
    $ LONGITUDE.1: num 32 32 32 32 32 ... 

は、今私は

は、次のコードを実行している...現在の生のデータを使用して操作の結果が含まれている新しい列を追加する必要があります。

library(geosphere) 
    > mydf$distance <- with(mydf, distGeo(c(mydf$LONGITUDE,mydf$LATITUDE),c(mydf$LONGITUDE,mydf$LATITUDE))) 
    Error in .pointsToMatrix(p1) : Wrong length for a vector, should be 2 

私はそれが関数distGeoのデータの構造が異なるはずであることを理解しています。 このエラーを修正する方法、または新しい列のポイント間の距離を取得するコードを変更する方法はありますか?

+0

を受け入れるとして機能するように、特定のデータ列を渡してみてください – Christoph

+0

それぞれの前に' mydf $を 'インクルードする必要はありません'with'を使用してデータフレームを参照したので、列名。また、単一点間の距離を計算しているというエラーがあるようです。 – manotheshark

+0

'with'演算子を使用していただきありがとうございます。エラーは、私が1点間の距離を計算しているということではありません。 – twistfire

答えて

1

データを見ることなく、1点間の距離を計算しようとしているようです。第二の点は、おそらく名前の列の末尾に.1含まれている必要があり

library(geosphere) 
mydf$distance <- with(mydf, distGeo(c(LONGITUDE, LATITUDE), c(LONGITUDE.1, LATITUDE.1))) 

それは誤りのように見えますが、あなたが個別に各列の代わりにデータフレーム全体を渡しているということです更新。 `データの一部をdput`してください。この

apply(mydf, 1, function(x) distGeo(x[c("LONGITUDE","LATITUDE")],x[c("LONGITUDE.1","LATITUDE.1")])) 

それとも、それは行列

distGeo(mydf[,c("LONGITUDE", "LATITUDE")], mydf[,c("LONGITUDE.1", "LATITUDE.1")]) 
+0

いいえ、問題はここにありません。問題は、distGeoに必要なデータが別の形式でなければならないということです...しかし、私はそれをどのように変更するのか分かりません。 – twistfire

+0

p1、p2パラメータ:ポイントの経度/緯度。 2つの数値のベクトル、2列の行列(最初の列は経度、2列目は緯度)またはSpatial-Points *オブジェクト – twistfire

+0

@twistfireは、 'apply'を使用して各行でベクトルを渡す方法とフィルターする方法を追加しましたその値を行列として渡す 'data.frame'。 – manotheshark

関連する問題