2014-05-08 11 views
7

Ich möchte feststellen, ob ein Vektor entweder immer zunimmt oder abnimmt immer in R.wenn ein Vektor bestellt

Idealfall, wenn ich diese drei Vektoren hatte:

asc=c(1,2,3,4,5) 
des=c(5,4,3,2,1) 
non=c(1,3,5,4,2) 

Ich hoffe, Die ersten beiden würden TRUE zurückgeben und die letzte würde FALSE zurückgeben.

Ich versuchte ein paar Ansätze. Zuerst habe ich versucht:

> is.ordered(asc) 
[1] FALSE 
> is.ordered(des) 
[1] FALSE 
> is.ordered(non) 
[1] FALSE 

und ich auch versucht:

> order(non) 
[1] 1 5 2 4 3 

und hoffte, dass ich einfach diesen Vektor mit 1,2,3,4,5 und 5,4,3 vergleichen konnte, 2,1, aber auch das gibt eine Reihe von Logicals, anstatt einem einzigen wahr oder falsch:

> order(non)==c(1,2,3,4,5) 
[1] TRUE FALSE FALSE TRUE FALSE 

Jede Beratung sehr geschätzt !!

+2

In Matlab würde ich prüfen, ob die 'diff' von Der Vektor ist entweder immer größer als Null oder immer kleiner als Null: 'all (diff (myVec)> = 0) || alle (diff (myVec) <= 0); '. Ich bin mir sicher, dass etwas Ähnliches in "r" existiert. – Floris

Antwort

8

Vielleicht ist is.unsorted die Funktion Ihrer

> is.unsorted(asc) 
[1] FALSE 
> is.unsorted(rev(des)) # here you need 'rev' 
[1] FALSE 
> is.unsorted(non) 
[1] TRUE 

Aus der Beschreibung von is.unsorted suchen können Sie finden:

-Test, wenn ein Objekt nicht sortiert ist (in aufsteigender Reihenfolge), ohne die Kosten es zu sortieren.

5

Hier ist eine Möglichkeit, mit ?is.unsorted:

is.sorted <- function(x, ...) { 
    !is.unsorted(x, ...) | !is.unsorted(rev(x), ...) 
} 

Werfen Sie einen Blick auf die zusätzlichen Argumente is.unsorted, die auch hier übergeben werden können.

0

is.ordered gilt für factor Variablen, dh es ist ein geordneter Faktor TRUE

> asc <- factor(1:5, ordered = TRUE) 
> is.ordered(asc) 
## [1] TRUE 
## -------- 
> des <- 5:1    ## numeric vector 
> des2 <- as.ordered(des) ## converts to ordered factor 
> is.ordered(des2)   
## [1] TRUE 

zurückkehren müssen, sie zu vergleichen,

> levels(des2) %in% levels(asc) 
## [1] TRUE TRUE TRUE TRUE TRUE