On 14-09-2013, at 18:35, gildororo...@mail-on.us wrote: > This is better explained by example: > >> A <- data.frame(force = sort(runif(10, 0, 1)), condition = >> sort(sample(0:100, 10))) >> B <- data.frame(counterforce = sort(runif(15, 0, 1), decreasing=T), >> condition = sort(sample(0:100, 15))) > > So we have: > >> A > force condition > 1 0.03515542 1 > 2 0.13267882 13 > 3 0.26155689 24 > 4 0.37453142 38 > 5 0.39360520 45 <--- trim everything after this > 6 0.43924737 48 > 7 0.47669800 50 > 8 0.57044795 51 > 9 0.81177499 61 > 10 0.98860450 94 > >> B > counterforce condition > 1 0.965769548 2 > 2 0.965266255 5 > 3 0.846941244 7 > 4 0.818013029 11 > 5 0.813139978 22 > 6 0.730599939 34 > 7 0.715985436 39 > 8 0.658073895 40 > 9 0.421264948 42 <--- trim everything after this > 10 0.373774505 52 > 11 0.242191461 62 > 12 0.090584590 63 > 13 0.070020635 68 > 14 0.067366062 83 > 15 0.001585313 84 > > I need to trim away rows after No. 5, from A, trim away rows after No. 9, > from B. > > Because > > A[5, condition] > max(B[1:9, condition] && A[5, force] > B[9+1, counterforce] > > In a general way, I am looking for x and y, where: > > A[x, condition] > max(B[1:y, condition] && A[x, force] > B[y+1, counterforce] > > and I will select A[1:x,] and B[1:y,], or trim away the rest, because they > are irrelevent for the calculation onwards. > > This is easy to do it in C, and I actually have done it in C-like R script, > by looping through all rows of A, and breaking from the loop when finding the > matching trim-point in B. But I am learning R, so what is the native way to > do it in R?
Your trim-point in B is not unique (at least for the data you provided). Use a loop in R like this for( x in seq_len(nrow(A)) ) { for( y in seq_len(nrow(B)-1) ) { res1 <- A[x,"condition"] > max(B[1:y,"condition"]) res2 <- A[x,"force"] > B[y+1,"counterforce"] res <- res1 && res2 if(res) cat("x=",x,"y=",y,"res=",res,"\n") } } Result is: # x= 5 y= 9 res= TRUE # x= 6 y= 8 res= TRUE # x= 6 y= 9 res= TRUE # x= 7 y= 8 res= TRUE # x= 7 y= 9 res= TRUE # x= 8 y= 8 res= TRUE # x= 8 y= 9 res= TRUE # x= 9 y= 5 res= TRUE # x= 9 y= 6 res= TRUE # x= 9 y= 7 res= TRUE # x= 9 y= 8 res= TRUE # x= 9 y= 9 res= TRUE # x= 9 y= 10 res= TRUE # x= 10 y= 1 res= TRUE # x= 10 y= 2 res= TRUE # x= 10 y= 3 res= TRUE # x= 10 y= 4 res= TRUE # x= 10 y= 5 res= TRUE # x= 10 y= 6 res= TRUE # x= 10 y= 7 res= TRUE # x= 10 y= 8 res= TRUE # x= 10 y= 9 res= TRUE # x= 10 y= 10 res= TRUE # x= 10 y= 11 res= TRUE # x= 10 y= 12 res= TRUE # x= 10 y= 13 res= TRUE # x= 10 y= 14 res= TRUE If you want a unique answer you'll need additional restrictions. Berend ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.