2012-02-14 19 views
0

私は、6列のデータフレームと個々のタグ付き魚の位置を含む多くの行を持っています。構造は以下の通りである:周囲の行に基づいてデータフレーム内の行を削除する

ヘッド(tag.29912)

Date.and.Time..UTC. Receiver Transmitter Latitude Longitude ndiffs29912 
1 07/10/2010 15:53 VR2W-107619 A69-1303-29912 48.56225 -53.89144   NA 
2 07/10/2010 15:56 VR2W-107619 A69-1303-29912 48.56225 -53.89144   180 
3 07/10/2010 16:00 VR2W-107619 A69-1303-29912 48.56225 -53.89144   240 
4 07/10/2010 16:24 VR2W-107619 A69-1303-29912 48.56225 -53.89144  1440 
5 07/10/2010 16:45 VR2W-104556 A69-1303-29912 48.56460 -53.88956  1260 
6 07/10/2010 16:47 VR2W-107619 A69-1303-29912 48.56225 -53.89144   120 

ndiffs29912は検出の間の時間差を意味する - 時間を計算する前は何も存在しないので、したがって、最初の行は、NAを有しますとの違い。

私は24時間(86400秒)にわたって発生する単一の検出を除外したいと思っています。これは疑わしいものです。私は、次のコードを試して削除しようとしました:

for (i in 1:length(tag.29912)) { 
if (tag.29912[i,6]>=86400 & tag.29912[i+1,6]>=86400) 
{rm(i)} 

これは機能しませんでした。私も試したことがあります:

for (i in 1:length(tag.29912)) { 
if (tag.29912[i,6]>=86400 & tag.29912[i+1,6]>=86400) 
{new<-tag.29912[i,]} 
else{filteredtag.29912<-as.data.frame(tag.29912[-new])} 
} 

を利用できません。最終的には、すべての単一の検出が削除された新しいデータフレームが必要です。 ヒントを頂ければ幸いです!

答えて

3

物事のカップルは:

  1. データフレームいくつかの特別な要件リスト(すなわち、リストの各要素は、同じ長さでなければなりません)。その結果、length(tag.29912)はリストの長さ、つまり列の数を返すべきですが、ループではおそらく行数をループすることになります。あなたはR.

  2. rm()を学ぶために非常に非常に重要であるベクトルを使用して、すべてのこれらの行を引き出すことができ

  3. は、あなたが何をしようとしてされていない、あなたのワークスペースからオブジェクトを削除します。あなたは連続で86400個の値でndiffs29912列の値を持つ行を識別し、それらを削除したいあなたの特定のケースで

ので

tag.29912$flag <- FALSE 
for (i in 2:(nrow(tag.29912) - 1){ 
    if (tag.29912[i,6]>=86400 & tag.29912[i+1,6]>=86400){ 
     tag.29912$flag[i] <- tag.29912$flag[i+1] <- TRUE 
    } 
} 
tag.29912 <- tag.29912[!tag.29912$flag,] 

のようなものは、何をしたいあなたを与える必要があります。

しかし、このコードの外見では、初心者向けに数時間かけて慎重に基本的な時間を費やすことを強くお勧めします。

+0

ご返信ありがとうございます。私は今日ベクトル化を検討しています。 – user1195564

関連する問題