Eugeniusz Kaluza
2010-May-22 15:05 UTC
[R] How to find all single minima, i.e. only each one within each next part of analyzed vector (table)
Dear R users, How to find all single minima within each next part of analyzed vector (table) Select all minima (mass_value=min & mass_value<2) (many) in vector(table), BUT first put mask on table in order to select within one window mask (5 elements) only one local minimum, and next to search within the next time window mask the second minimum (only one local along second mask) mass_position<-c(1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15,16,17,18,19,20) mass_value<-c(9,2,3,2,5,6,7,8,9,10,2.1,12, 1,14,15,16,17,18,19,20) mass_label<-c("lab1","lab2","lab3","lab4","lab5","lab6","lab7","lab8","lab9","lab10", "lab11","lab12","lab13","lab14","lab15","lab16","lab17","lab18","lab19","lab20") dt<-5 # i.e. mass_value<-c (9,0,3,1,5,6,7,8,3,10,2.1,12, 1, 1,15,16,17,18,19,20) mass_position<-c(1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15,16,17,18,19,20) # - - - - - # 1 x first needed min= 0, pos=2 #(only one within first mask) # - - - x - # (min= 3, but & ( 3 is not <2)) =>there is not min for us locally # - - - - - # 1 x 2nd needed min=1,pos=13 # not min=1 on position 14, because we want only 1 min locally # and only one locally within each NEXT 5 elements) # # . . . . . #correct answer would be vector : # "lab2","lab13" #expected answer = local_min_positions = (2 ,13 ) local_min_values = (0 ,1 ) local_min_labels = ("lab2","lab13") How to find labels from my_label: for all localizations of different minima in mass, but within time window there can be only one minimum, i.e. in dt=5 second wide time window there can be only one minimum Yours sincerely, Eugen [[alternative HTML version deleted]]
Wu Gong
2010-May-22 16:54 UTC
[R] How to find all single minima, i.e. only each one within each next part of analyzed vector (table)
I hope this will help. ### Find rows with minimum value from every 5 rows ## Create the data mlb <- data.frame(mass_position=c(1,2,3,4,5,6,7,8,9,10, 11,12,13,14,15,16,17,18,19,20), mass_value=c(9,2,3,2,5,6,7,8,9,10,2.1,12, 1,14,15,16,17,18,19,20), mass_label=c("lab1","lab2","lab3","lab4","lab5","lab6","lab7","lab8","lab9","lab10", "lab11","lab12","lab13","lab14","lab15","lab16","lab17","lab18","lab19","lab20") ) ## Sort the data three times ## Create result by selecting first rows of every 5 rows mlb2 <- mlb[order(mlb[,1] %/% 5.1, mlb[,2], mlb[,1]),][mlb[,1] %% 5 == 1,] ## Exclude rows which mass_value > 2 (mlb3 <- mlb2[mlb2[,2] <= 2,]) ----- A R learner. -- View this message in context: http://r.789695.n4.nabble.com/How-to-find-all-single-minima-i-e-only-each-one-within-each-next-part-of-analyzed-vector-table-tp2227224p2227292.html Sent from the R help mailing list archive at Nabble.com.