Вы были очень близки к тому, чтобы решить проблему самостоятельно.Вот мое решение: я использовал which.min
, чтобы найти индекс самой ранней даты из каждой группы, затем я использовал это значение индекса в расчете.
gpeData<-structure(list(Manip = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L),
Traitment = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L,
2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 2L, 2L, 2L
), .Label = c("mock", "xcc"), class = "factor"), Ecotype = structure(c(2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("a1-10", "a1-2"
), class = "factor"), Date = structure(c(1513036800, 1513123200,
1513209600, 1513036800, 1513123200, 1513209600, 1521504000,
1521590400, 1521763200, 1521504000, 1521590400, 1521763200,
1513036800, 1513123200, 1513209600, 1513036800, 1513123200,
1513209600, 1521504000, 1521590400, 1521763200, 1521504000,
1521590400, 1521763200), class = c("POSIXct", "POSIXt"), tzone = "GMT"),
Area = c(17699L, 24538L, 27958L, 19857L, 27973L, 35875L,
18177L, 20251L, 36679L, 17261L, 18697L, 35345L, 22853L, 34641L,
40311L, 23754L, 33247L, 40603L, 28201L, 30306L, 49086L, 27217L,
29844L, 46540L), Normalized_Area = c(1, 1.39, 1.58, 1, 1.41,
1.81, 1, 1.11, 2.02, 1, 1.08, 2.05, 1, 1.52, 1.76, 1, 1.4,
1.71, 1, 1.07, 1.74, 1, 1.1, 1.71)), row.names = c(NA, -24L
), class = "data.frame")
library(dplyr)
ans<-gpeData %>%
group_by(Traitment, Ecotype, Manip ) %>%
mutate(NormArea=Area[which.min(Date)], Normalized= Area/NormArea)