【发布时间】:2016-06-18 16:46:21
【问题描述】:
我正在尝试将 ID 代码添加到数据框(筒子架),这是从 2000 年到 2015 年贝类登陆的时间序列。下面给出了前几列:
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,“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")
“aa”是我想在 fID 向量中分配的代码,仅在 2004-W53 和 2015-W53 周之间。我不确定 R 是否会在与周一起使用时识别 > 或
我也尝试使用 ifelse,但仅适用于船主在整个数据集中没有变化的船(在这种情况下,星期无关紧要)。像这样的东西,(也没有工作!):
creel$fID <- ifelse(creel$boat=="Unst", as.factor(creel$fID=="ad"), NA)
数据集非常大,但如果更容易的话,我很乐意单独做每个人/船的组合。
更新: 这是我拥有的另一个 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>
您可以看到 James 在 Bob 之后拥有“Mousa”,而 Wayne 在 Bill 之后拥有“Yell”。我需要 James 的 ID 在他同时拥有 Foula 和 Mousa 的那几周内保持为“ac”(也就是说,我可以通过时间追踪渔夫,而不仅仅是船)。
【问题讨论】:
-
您没有提供 id 的通用规则。你只给出了'aa'的例子。例如,你怎么知道哪些行应该得到“ac”?
-
@PierreLafortune ac 将转到该船 = Foula 的所有行,以获取相关人员拥有该船的周数。然后可以在人“ac”之后将船卖给其他人,然后需要一个新的所有者 ID。我总共有 99 位船主(每个船主都有一个 ID)的所有船舶所有权周数。
-
至于过滤日期,为什么不保留(也)准确的源日期?在它们上,您可以使用“”
-
@EricLecoutre 我也许应该有。数据框中有许多变量(着陆、温度、风等),它们都被分组为几周进行分析。这是在决定将渔夫 ID 添加到数据框之前完成的。
标签: r dataframe if-statement week-number