Вычислить разницу между максимальным и минимальным значениями двух векторов для вложенных подмножеств этих векторов - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть кадр данных около 900 строк (см. Упрощенный пример ниже). Я пытаюсь оценить значение максимума (дой) - минимума (дой) на whaleID в год. Мне нужно вернуть объект (например, таблицу) разницы дой по whaleID и году. Одна из проблем заключается в том, что не каждый год содержит два наблюдения «дой». Я попытался использовать «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 Ответ

1 голос
/ 30 сентября 2019

Вы можете просто использовать 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
...