2016-10-19 5 views
0

Ich habe einen VektorWie r Rang für eine bestimmte Bedingung?

x<-c(1,5,0.4,1.3,0.2,0.6) 

I x Rang wollen, um nur für die Werte bei der Verringerung, die größer als 1 ist ich nicht die x-Vektor durch Entfernen Werte zu ändern, die weniger als 1 sind.

Meine gewünschte Ausgabe ist wie

rank=c(3,1,Null,2,Null,Null) 

Kann mir jemand helfen?

+0

One-Liner 'ersetzen (NA_real_, x> = 1, Rang (-x [x> = 1])) ' –

+0

Vielen Dank Rich! –

Antwort

1

Sie können es wie folgt tun:

x <- c(1,5,0.4,1.3,0.2,0.6) 
temp <- x 
temp[temp < 1] <- NA 
rank(-temp, na.last = "keep") # -temp so that the decreasing order is used 

# [1] 3 1 NA 2 NA NA 
+0

Vielen Dank Etienne !! –

0

Mit dplyr:

df <- data.frame(x=c(1,5,0.4,1.3,0.2,0.6)) 

library(dplyr) 
df <- df %>% 
    mutate(filtered = ifelse(x<1, NA, x)) %>% 
    mutate(rank = rank(-filtered, na.last = "keep")) 
df 

    x filtered rank 
1 1.0  1.0 3 
2 5.0  5.0 1 
3 0.4  NA NA 
4 1.3  1.3 2 
5 0.2  NA NA 
6 0.6  NA NA 
+0

Vielen Dank mpschramm :) –

1

Sie dies tun könnte:

rnk <- rep(NA, length(x)) 
w <- which(x>=1) 
rnk[w] <- rank(-x[w]) 

#[1] 3 1 NA 2 NA NA 
+0

Danke für deinen Code m0h3n –

Verwandte Themen