我有大约900行的数据框(请参见下面的简化示例)。我正在尝试估算每个whaleID每年的最大值(doy)–最小值(doy)的值。我需要通过whaleID和year返回doy差异的对象(例如表格)。一个挑战是,并非每年都包含两个“常见问题”观察。我尝试使用“ dplyr”,aggregate()并进行循环(我尚无法胜任设计)。如果可能的话,我想使用Base来实现这一目标,但是,对于有关此方面的帮助,我们不胜感激,谢谢!
whaleID<-c(31,4,5,65,31,4,4,4,31,5)
year<-c(2010, 2010, 2010, 2011, 2011, 2011, 2011, 2011, 2011, 2011)
doy<-c(65,71,88,67,77,78,81,82,88,88)
答案 0 :(得分:1)
您可以只使用aggregate()
并从range()
中减去值:
whaleID<-c(31,4,5,65,31,4,4,4,31,5)
year<-c(2010, 2010, 2010, 2011, 2011, 2011, 2011, 2011, 2011, 2011)
doy<-c(65,71,88,67,77,78,81,82,88,88)
dfx <- data.frame(whaleID, year, doy)
aggregate(dfx$doy, by = list(whaleId = dfx$whaleID, year = dfx$year),
FUN = function(x) diff(range(x)))
whaleId year x
1 4 2010 0
2 5 2010 0
3 31 2010 0
4 4 2011 4
5 5 2011 0
6 31 2011 11
7 65 2011 0