データフレーム(クリール)にIDコードを追加しようとしています。これは2000年から2015年までの貝の着陸の時系列です。以下に列がいくつかあります:週番号(ISOweek)に基づいてRのデータフレームにIDベクトルを割り当てる
head(creel,10)
week year boat fID
1 2000-W01 2000 Mousa NA
2 2000-W01 2000 Yell NA
3 2000-W01 2000 Foula NA
4 2000-W01 2000 Foula NA
5 2000-W02 2000 Foula NA
6 2000-W02 2000 Papa Stour NA
7 2000-W02 2000 Fetlar NA
8 2000-W02 2000 Unst NA
9 2000-W03 2000 Foula NA
10 2000-W03 2000 Fair Isle NA
...
IDはボートの所有者のものであり、時間とともに変化します。私は誰がどのボートを所有しているかについての詳細を持っており、 "fID"列に追加する固有のコードを作成しています(これを作成してNAで埋めました)。この目的のために、 "aa"はMousaのID、Yellの "ab"、上記の行のFoulaの "ac"などとしましょう。 Mousaの所有者がデータフレーム内にある新しいボートを購入すると、「aa」がそれらと共に移動し、新しいボート名に割り当てられます。
週ベクトルは、ISOweek関数を使用して実際の日付から作成されました。
creel$week <- as.ordered(creel$week)
#Levels:2000-W01 < 2000-W02 < 2000-W03 < 2000-W04 < 2000-W05<...<2015-W53
私はそもそも1隻のボートのためのユニークなFIDコードを追加しようとしましたが、それはしませんでした:1週間ベクトルは、Rは、時系列的に最初から最後まで正しい順序を知っているので、注文した要因であります作品:
creel$fID[which(creel$boat=="Mousa" & creel$week=>"2004-W53" & creel$week=<"2015-W53"),] <- as.factor("aa")
"AA" は、私が唯一の2004-W53および2015-W53週間の間、FIDベクトルに割り当てるしたいコードです。週に使用するときにRが>または<を認識するかどうかわかりませんでした - 私はunclass(creel $ week)が代わりに使用できる週番号の実際の値を与えることがわかりました。
また、ifelseを使用してみましたが、所有者がデータセット全体で変更されていないボートの場合のみ(その場合は週は関係ありません)。このような何かは、(!も動作しませんでした):私はそれが簡単だ場合は、個別に各人/ボートコンボを行うには満足しているものの
creel$fID <- ifelse(creel$boat=="Unst", as.factor(creel$fID=="ad"), NA)
データセットは、非常に大きいです。
UPDATE:ここ はどのボート、そしてときに所有者その詳細は、私が持っているdfを他の例を示します
Person code boat1 date_from date_to boat2 date_from2 date_to2
1 Bob aa Mousa 2002-W53 2005-W34 <NA> <NA> <NA>
2 Bill ab Yell 1999-W52 2010-W52 <NA> <NA> <NA>
3 James ac Foula 1999-W52 2005-W26 Mousa 2005-W35 2015-W53
4 Tom ad Unst 1999-W52 2015-W53 <NA> <NA> <NA>
5 Willie ae Fetlar 2007-W35 2015-W53 <NA> <NA> <NA>
6 Wayne af Yell 2011-W01 2013-W13 <NA> <NA> <NA>
あなたはジェームズはボブの後に「Mousa」を所有し、そしてウェインということがわかりますBillの後に "Yell"を所有していた。私はFoulaとMousaの両方を所有していた週の間、 "ac"のままにするためにJamesのIDが必要です(つまり、私は漁師を時間通りに追跡することができます。
idsの一般的な規則は指定していません。あなたは 'aa'の例だけを与えました。どのような行に「ac」を付けるべきか、どのように知っていますか? –
@PierreLafortune acは、問題の人がボートを所有していた週番号のボート= Foulaのすべての行に移動します。ボートは、その後、人「ac」の後に他の人に売却され、新しい所有者IDが必要となる。全部で99人のオーナー(それぞれID付き)のボートオーナーシップの週番号があります。 –
日付のフィルタリングでは、正確なソース日付を保持してみませんか?それらには "<" and ">" –