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

R 计算两个向量的嵌套子集的最大值和最小值之间的差值,r,loops,nested,R,Loops,Nested,我有一个大约900行的数据帧(见下面的简化示例)。我试图估算每年每捕鲸的最大(doy)–最小(doy)值。我需要按whaleID和year返回doy差异的对象(例如表)。一个挑战是,并非每年都有两次“昏昏欲睡”的观察。我尝试过使用“dplyr”、aggregate()和生成循环(我还没有设计能力)。如果可能的话,我想通过使用基地来实现这一点,但是我会全神贯注地听取关于这一点的任何建议,谢谢 whaleID<-c(31,4,5,65,31,4,4,4,31,5) year<-c(201

我有一个大约900行的数据帧(见下面的简化示例)。我试图估算每年每捕鲸的最大(doy)–最小(doy)值。我需要按whaleID和year返回doy差异的对象(例如表)。一个挑战是,并非每年都有两次“昏昏欲睡”的观察。我尝试过使用“dplyr”、aggregate()和生成循环(我还没有设计能力)。如果可能的话,我想通过使用基地来实现这一点,但是我会全神贯注地听取关于这一点的任何建议,谢谢

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)

whaleID您可以使用
aggregate()
并从
range()
中减去值:


whaleIDI在这种情况下,
doy只有一行
如何计算差异?它应该是0还是相同的单个值?你能显示给定数据的预期输出吗?我不确定我是否遗漏了什么,但这不是聚合(doy~whaleID+年份,df,函数(x)差异(范围(x))
?@Ronaksha是的,这是等效的。我个人喜欢
by
语法与公式语法,但我想这是风格的问题
diff(range(x))
我认为这是一个改进,将更新到该选项
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