这是一个大型数据集,但这是一个例子:
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 12450
和6/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
多次尝试了,但我似乎无法得到我正在寻找的结果。
任何援助将不胜感激。
谢谢!
答案 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