0

ID タグ「1」、「2」、「3」ごとにデータ マトリックスをループしようとしています (下部のデータを参照)。最終的には、X 座標と Y 座標を ts() 関数を使用して時系列に変換するためにこれを行っていますが、最初に、個別の ID ごとに時系列を返す関数にループを構築する必要があります。データフレームに次のコードを使用すると、ループ自体は完全に正常に機能します。

for(i in 1:3){ print(na.omit(xyframe[ID==i,])) }

次の出力を返します。

 Timestamp X Y ID  
 1. 0 -34.012 3.406 1  
 2. 100 -33.995 3.415 1  
 3. 200 -33.994 3.427 1

 Timestamp       X     Y ID  
 4.          0 -34.093 3.476 2  
 5.        100 -34.145 3.492 2  
 6.        200 -34.195 3.506 2  

   Timestamp       X     Y ID  
 7.         0 -34.289 3.522 3  
 8.       100 -34.300 3.520 3  
 9.       200 -34.303 3.517 3  

それでも、同じコードで行列にループを生成したい場合:

for(i in 1:3){ print(na.omit(xymatrix[ID==i,]) }

次のエラーが返されます。

Error in print(na.omit(xymatrix[ID == i, ]) : 
  (subscript) logical subscript too long

データフレームでは機能しているのに、マトリックスを介して ID をループしても機能しないのはなぜですか?どうすれば修正できますか? さらに、ループには同じことをベクトルベースで行うよりもはるかに多くの計算能力が必要であると読みましたが、このベクトルベースを行う方法はありますか?

データ (実際のデータの単純化):

 Timestamp X Y ID  
 1.   0 -34.012 3.406 1  
 2. 100 -33.995 3.415 1  
 3. 200 -33.994 3.427 1  
 4.   0 -34.093 3.476 2  
 5. 100 -34.145 3.492 2  
 6. 200 -34.195 3.506 2  
 7.   0 -34.289 3.522 3  
 8. 100 -34.300 3.520 3  
 9. 200 -34.303 3.517 3 
4

2 に答える 2

1

この形式xymatrix[ID==i,]はマトリックスでは機能しません。この方法を試してください:

for(i in 1:3){ print(na.omit(xymatrix[xymatrix[,'ID'] == i,])) }
于 2013-02-18T11:45:24.657 に答える