计算这些向量的嵌套子集的两个向量的最大值和最小值之间的差

时间:2019-09-30 11:33:29

标签: r loops nested

我有大约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)

1 个答案:

答案 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