【发布时间】:2014-08-15 03:48:06
【问题描述】:
我有一个如下所示的 data.table 或 data.frame:
Name Person Date
A 1 1/1/2004
A 2 1/1/2004
A 2 1/3/2004
A 3 1/1/2004
A 3 1/3/2004
A 3 1/9/2004
B 4 1/7/2004
B 5 1/7/2004
B 5 1/10/2004
B 6 1/7/2004
B 6 1/10/2004
B 6 1/17/2004
在这里,我正在尝试创建一个新的数据表,其中包含日期的“NA”,如果它们不是每个人的最大值。基本上,我试图让数据表看起来像:
Name Person Date
A 1 1/1/2004
A 2 "NA"
A 2 1/3/2004
A 3 "NA"
A 3 "NA"
A 3 1/9/2004
B 4 1/7/2004
B 5 "NA"
B 5 1/10/2004
B 6 "NA"
B 6 "NA"
B 6 1/17/2004
基本上,我想到的算法是按人查看每个分组。如果按人分组只有一个元素,则该值是最大值,因此我们让它留在那里。但是,例如,在按人 2 分组时,最大值是 2004 年 1 月 3 日,所以我们让 2004 年 1 月 1 日为“NA”。
我能想到的唯一方法是按组(Person)找到与最大值对应的数据表的索引,然后创建一个所有NA的新向量,然后用最大值的索引替换价值观。
代码如下:
which.max(data$Date, by=data$Person)
不知何故,这对我不起作用,但无论哪种方式,这段代码看起来都可能很耗时,尤其是当我的数据集是 1 亿行时。大型数据集是否会有快速实现,尤其是在 data.table 包中工作?谢谢!
【问题讨论】:
标签: r data.table