[R] looking for 'tied rows' in dataframe
Evan Cooch
ev@n@cooch @end|ng |rom gm@||@com
Mon Mar 18 00:39:54 CET 2019
Suppose I have the following sort of structure:
test <- matrix(c(2,1,1,2,2,2),3,2,byrow=T)
What I need to be able to do is (i) find the maximum value for each row,
(ii) find the column containing the max, but (iii) if the maximum value
is a tie (in this case, all numbers of the row are the same value), then
I want which.max (presumably, a tweaked version of what which.max does)
to reurn a T for the row where all values are the same.
Parts (i) and (ii) seem easy enough:
apply(test,1,max) --- gives me the maximum values
apply(test,1,which.max) --- gives me the column
But, standard which.max doesn't handles ties/duplicates in a way that
serves my need. It defaults to returning the first column containing the
maximum value.
What I'd like to end up with is, ultimately, something where
apply(test,1,which.max) yields 1,2,T (rather than 1,2,1).
So, a function which does what which.max currently does if the elements
of the row differ, but which returns a T (or some such) if in fact the
row values are all the same.
I've tried a bunch of things, to know avail. Closest I got was to use a
function to test for whether or not a vector
isUnique <- function(vector){
return(!any(duplicated(vector)))
}
which returns TRUE if values of vector all unique. So
apply(test,1,isUnique)
returns
[1] TRUE TRUE FALSE
but I'm stuck beyond this. Suggestions/pointers to the obvious welcome.
Thanks in advance.
More information about the R-help
mailing list