在R

时间:2015-09-18 01:39:00

标签: r

这是一个大型数据集,但这是一个例子:

CollarID, DateTime,             X,            Y    
12450,   6/15/2014,   2400930.319,   1725003.01
12450,   6/15/2014,   2401080.891,   1725085.449
12450,   6/15/2014,   2401061.067,   1725083.886
12450,   6/16/2014,   2401067.087,   1725082.833
35302,   6/20/2014,   2351514.766,   1732670.932
35296,   6/21/2014,   2287266.877,   1647129.914

正如您所看到的,有多个独特的CollarID,其中一些CollarID每天都有多个位置。

我需要编写一个代码,为每个唯一CollarID提取当天的第一个位置。并非每个领子每天都有一个位置。

例如:我需要保留位置 Collar ID 124506/15/2014上的6/16/2014 同时从6/15/2014丢弃所有其他位置。

结果如下:

CollarID, DateTime,             X,            Y    
12450,   6/15/2014,   2400930.319,   1725003.01

12450,   6/16/2014,   2401067.087,   1725082.833

35302,   6/20/2014,   2351514.766,   1732670.932

35296,   6/21/2014,   2287266.877,   1647129.914

我已经用lubridate多次尝试了,但我似乎无法得到我正在寻找的结果。 任何援助将不胜感激。 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用group_by library(dplyr) df %>% group_by(CollarID, DateTime) %>% slice(1) Source: local data frame [3 x 4] Groups: CollarID, DateTime [3] CollarID DateTime X Y (int) (fctr) (dbl) (dbl) 1 12450 6/15/2014 2400930 1725003 2 35296 6/21/2014 2287267 1647130 3 35302 6/20/2014 2351515 1732671 grep echo "sample_2341-43-11.txt" | grep -Eo "((\d+|-)+)" 中使用的每个元素的第一行:

2341-43-11

答案 1 :(得分:1)

如果我理解正确,您可以使用duplicated(假设您的数据按CollarID和DateTime排序)。

dat[!duplicated(dat[1:2]),]

  CollarID  DateTime       X       Y
1    12450 6/15/2014 2400930 1725003
4    35302 6/20/2014 2351515 1732671
5    35296 6/21/2014 2287267 1647130