[R] Find the max entry in column 2 - that satisfies a condition given a fixed entry in column 1

Rui Barradas ru|pb@rr@d@@ @end|ng |rom @@po@pt
Fri Jun 21 07:47:15 CEST 2019


Hello,

Inline.

Às 10:15 de 20/06/19, Vangelis Litos escreveu:
> I am using R and I created based on a vector x, a grid (named: plain) - where zero is included. This gives me a 9x2 ``matrix''.
> 
>> x_t = cbind(c(1),c(2));
>> x = t(x_t);

This code works but there are several issues with it.

1) c(1) is exactly the same as just 1. Try running

identical(c(1), 1)

2) You end the line with a semi-colon. This is not needed.
In fact,

the semi-colon is the INSTRUCTIONS SEPARATOR

so what you end up with is 2 instructions, one on the left of the ; and 
the other, the NULL instruction, on the right. What the parser sees and 
processes is

instruction;NULL

3) Then in the next line you transpose the matrix you have created. Much 
  simpler:

y <- rbind(1, 2)
identical(x, y)    # TRUE


> 
>> plain = expand.grid (sort (unique (c (0, x))), sort (unique (c (0, x))));


4) Now you combine the matrix you have created with a new element, 0.

c(0, x)

The output of this is no longer a matrix, it's a vector without the dim 
attribute.

identical(c(0, x), c(0, 1, 2))    # TRUE


> 
> My aim is to focus on column 1 and take i.e the first entry (then the second, the third entry etc through a loop) of the unique (c (0, x)) vector (==0) [rows 1, 4 and 7] and find the maximum value (entry) in the second column of the matrix that satisfies a condition.
> 
> Let say that the condition is satisfied when at column 2 the value is 2. That is I want row 7 to be selected
> 


The following function does this.


fun <- function(X, val){
   u <- sort(unique(X))
   plain <- expand.grid(u, u)
   w <- which(plain[, 1] == val)
   w[which.max(plain[w, 2])]
}

fun(c(0, x), 0)
#[1] 7
fun(c(x, 0, x), 0)
#[1] 7


> Then I want to create a column vector b (9x1) that has zero everywhere apart from row 7.


And what would be the non-zero value? The max in column 2?

b <- numeric(nrow(plain))    # creates a vector of 9 zeros
i <- fun(c(0, x), 0)
b[i] <- new_value

# or maybe

b[i] <- plain[i, 2]


The first and the last instructions have an obvious problem, 'plain' 
only exists inside the function fun(), it will have to be created elsewhere.


Hope this helps,

Rui Barradas
> 
> Can anybody help me with this?
> 
> Thank you in advance.
> 
> 	[[alternative HTML version deleted]]
> 
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>



More information about the R-help mailing list