[R] get a month where max value is

ani jaya g@@@uu| @end|ng |rom gm@||@com
Wed Dec 16 06:49:55 CET 2020


Dear R-Help,

I have a data frame containing monthly maxima of rainfall in 10
locations for 30 year and want to look at a month where an annual
maxima happens. I can get the annual maxima using aggregate. I try to
extract the month using the code below.

ann10<-aggregate(mon10[3:12],list(mon10$Group.1),max,na.rm=T)
when<-matrix(NA,30,10)
dum<-list()
for(j in 1:10){
  for(i in 1:30){
    dum<-which(mon10[,j+2]==ann10[i,j+1])
    when[i,j]<-mon10$Group.2[dum[1]]
  }
}

I am aware that the code above is wrong when multiple max value
detected (so I use dum[1] there). Any elegant solution how to find the
month?? Thank you

dput(head(mon10,36))

structure(list(Group.1 = structure(c(1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L), .Label = c("1985",
"1986", "1987", "1988", "1989", "1990", "1991", "1992", "1993",
"1994", "1995", "1996", "1997", "1998", "1999", "2000", "2001",
"2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009",
"2010", "2011", "2012", "2013", "2014"), class = "factor"), Group.2 =
structure(c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L,
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 2L, 3L, 4L, 5L, 6L, 7L,
8L, 9L, 10L, 11L, 12L), .Label = c("01", "02", "03", "04", "05",
"06", "07", "08", "09", "10", "11", "12"), class = "factor"),
    V1 = c(0, 0, 0, 0, 0, 0, 1, 13, 0, 0, 0, 0, 175, 123, 76,
    112, 35, 52, 14, 28, 63, 68, 30, 67, 107, 46, 44, 22, 33,
    25, 10, 5, 50, 10, 32, 59), V2 = c(167, 50, 48, 114, 128,
    37, 54, 5, 23, 36, 10, 43, 175, 123, 110, 112, 58, 12, 18,
    171, 63, 68, 30, 79, 189, 40, 35, 45, 23, 10, 0, 1, 1, 5,
    34, 71), V3 = c(63.0054, 68.9842, 1, 115.9904, 5.796, 53.0929,
    63.0092, 18.3692, 0, 30.1854, 12.214, 55.0721, 91.9728, 64.9951,
    28.431, 21.6815, 38.4651, 48.1583, 1, 1, 1, 7.654, 50.1237,
    86.9713, 69.9766, 14.2489, 45.2282, 12.4218, 18.5532, 23.9453,
    38.4967, 0, 0, 1.8495, 41.3493, 69.98), V4 = c(112, 94, 70,
    18, 6.1, 55, 84.1, 7.1, 0, 4.1, 24.9, 26.9, 42, 38, 38, 62,
    26, 50, 8, 0, 6, 40, 18, 77, 30, 78, 31, 28, 13, 27, 50,
    0, 0, 0, 29, 84), V5 = c(114.2545, 96.2488, 71.9131, 14.299,
    22.2288, 55.4017, 1.971, 3.69, 0, 13.301, 57.5355, 27.3004,
    39.6649, 34.3766, 34.3278, 63.1532, 21.4376, 49.5373, 4.556,
    0, 2.7328, 36.8717, 66.3924, 79.1253, 25.1753, 80.1422, 26.2089,
    23.232, 9.4119, 22.3628, 49.4622, 0, 0, 0, 24.1889, 86.2128
    ), V6 = c(65, 35, 83, 46, 50, 26, 28, 10, 6, 13, 90, 97,
    178, 138, 79, 47, 30, 73, 5, 0, 1, 24, 55, 46, 80, 62, 56,
    57, 21, 18, 0, 0, 0, 9, 36, 175), V7 = c(110, 100, 100, 63,
    167, 40, 5, 7, 76, 0, 15, 17, 55.1, 116.1, 57.9, 21.1, 0.3,
    103.1, 14, 0, 5.1, 5.1, 1, 20.1, 31, 26.9, 0.5, 0, 27.9,
    41, 0, 6.1, 0, 0, 0, 0), V8 = c(78, 87, 37, 98, 0, 0, 0,
    0, 0, 0, 0, 0, 64, 90, 89, 73, 104, 70, 101, 15, 0, 0, 0,
    0, 0, 1, 38, 97, 114, 28, 0, 0, 0, 0, 0, 0), V9 = c(29, 17,
    72, 29, 16, 25, 23, 43, 37, 10, 15, 7, 14, 77, 54, 43, 22,
    58, 63, 27, 12, 12, 16, 9, 22, 33, 60, 54, 40, 37, 35, 12,
    1, 4, 11, 49), V10 = c(63.1161, 11.9425, 35.3226, 34.0615,
    92.9325, 34.0785, 39.009, 21.5103, 17.9209, 50.9037, 32.7218,
    52.2346, 63.1381, 99.946, 48.0861, 63.1813, 43.7723, 86.9132,
    39.1252, 49.6261, 40.7285, 112.9464, 49.8403, 66.5253, 21.5789,
    12.0566, 89.927, 71.7187, 37.816, 5.3817, 1, 0, 0, 4.636,
    40.7964, 88.9239)), row.names = c(1L, 31L, 61L, 91L, 121L,
151L, 181L, 211L, 241L, 271L, 301L, 331L, 2L, 32L, 62L, 92L,
122L, 152L, 182L, 212L, 242L, 272L, 302L, 332L, 3L, 33L, 63L,
93L, 123L, 153L, 183L, 213L, 243L, 273L, 303L, 333L), class = "data.frame")

sessionInfo()
R version 4.0.2 (2020-06-22)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)


Best,
Ani



More information about the R-help mailing list