Я пытаюсь добавить идентификационные коды в dataframe (creel), который является временным рядом посадок моллюсков с 2000 по 2015 год. несколько столбцов приведены ниже:Присвоение ID-вектора в dataframe в R, на основе номера недели (ISOweek)
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, «ab» для Yell, «ac» для Foula и т. Д. В строках выше. Если владелец Mousa покупает новую лодку, которая находится в кадре данных, «aa» отправится вместе с ними и будет назначено новое имя лодки.
Вектор недели был создан с фактических дат, используя функцию ISOweek. Неделя вектор упорядоченного фактор, поэтому R знает правильный заказ от начала до конца во временном ряду:
creel$week <- as.ordered(creel$week)
#Levels:2000-W01 < 2000-W02 < 2000-W03 < 2000-W04 < 2000-W05<...<2015-W53
Я попытался добавить уникальные FID код для одной лодки, чтобы начать с, но это не так работа:
creel$fID[which(creel$boat=="Mousa" & creel$week=>"2004-W53" & creel$week=<"2015-W53"),] <- as.factor("aa")
«аа» код, который я хотел бы назначить в векторе FID, только между неделями 2004-W53 и 2015-W53. Я не был уверен, узнает ли R> или < при использовании с неделями - я обнаружил, что unclass (creel $ week) дает фактические значения для чисел недели, которые, возможно, могут быть использованы вместо этого.
Я также пробовал использовать ifelse, но только для лодок, где владелец не менялся по всему набору данных (в этом случае неделя не имеет значения). Нечто подобное, (тоже не работает!):
creel$fID <- ifelse(creel$boat=="Unst", as.factor(creel$fID=="ad"), NA)
Набор данных очень большой, хотя я рад сделать каждый комбо человек/лодка индивидуально, если это проще.
UPDATE: Вот пример другого ДФ у меня есть, что детали, которые принадлежат какой лодке, и когда:
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>
Вы можете видеть, что Джеймс владел «Мусы» после Боба, и что Уэйн принадлежал «Yell» после Билла. Мне нужен идентификатор Джеймса, чтобы он оставался «ac» в течение недель, в течение которых ему принадлежали как Foula, так и Mousa (т. Е. Я мог проследить рыбака во времени, а не только от лодки).
Вы не указали общее правило для идентификаторов. Вы дали только пример «aa». Откуда вы знаете, какие строки должны получить «ac», например? –
@PierreLafortune ac будет ходить во все ряды, где лодка = Foula, за номера недели, которые этот человек владел лодкой. Затем лодку можно продать кому-то еще после человека «ac», тогда потребуется новый идентификатор владельца. У меня есть все номера недели для владения лодкой всего 99 владельцев (каждый с идентификатором). –
Что касается фильтрации по датам, почему бы вам не сохранить (также) точные даты источника? На них вы можете использовать «<" and ">» –