2013-11-20 9 views
5

Sto cercando una funzione di indicatore in R, cioè una funzione che restituisce un 1, se il valore di un elemento in un vettore è maggiore di 0 e restituisce zero, se il valore di un elemento in un vettore è inferiore a 0.Funzione di indicatore in R

Ho bisogno di utilizzare questa funzione su tutti gli elementi di un vettore che restituiscono un nuovo vettore con solo zero e uno.

Grazie.

+0

Cosa c'è che non va con il normale operatore '>'? –

+1

'as.numeric (x> 0)' dovrebbe funzionare. –

risposta

4

Se sono in grado di capirti correttamente, allora vuoi apportare delle modifiche all'intero frame di dati, supponendo di quale possa suggerirti di usare apply come sotto, dove df è il tuo data frame.

apply(df,2,function(x)ifelse((x>0),1,0)) 

È inoltre possibile utilizzare se per un solo vettore di qualcosa come di seguito:

x <- c(-2,3,1,0) 
y <- ifelse(x>0,1,0) 
print(y) 
[1] 0 1 1 0 #Output 

Spero che questo aiuti

+0

Super cool; grazie! –

6

ci sono una varietà di modi, la minima sequenza di tasti one:

Ivec <- 0+(vec>0) 

Salva un paio di sequenze di tasti su: as.numeric(vec>0). Direi che l'approccio ifelse(x>0,1,0) sarebbe un po 'più lento se applicato a un vettore di grandi dimensioni o se utilizzato nelle simulazioni. Potrebbe anche usare:

Ivec <- 1*(vec>0) 
+0

Wow, + 1, sapevo che 0+ trucco, fantastico – PKumar

1

La funzione I in R, chiamato Inibizione Interpretazione/Conversione di oggetti funzionano, può essere utilizzato per questo scopo. Ad esempio, la linea di seguito restituisce i valori per la funzione I (x < 4) dove X = {0,,,,, 5 1 2 3 4}:

> I(0:5 < 4) 
[1] TRUE TRUE TRUE TRUE FALSE FALSE 

In R TRUE e FALSE possono essere trattati

come 1 e 0, ma se insisti sul fatto che il tuo output è precisamente quei numeri, avvolgi la tua funzione I in as.numeric.

+1

Perché hai usato la funzione Asis ... non usarlo restituisce lo stesso oggetto ('0: 5 <4'). Quando lo si utilizza, l'oggetto restituito è ora di classe "AsIs" (che può produrre conseguenze inattese a valle) – user20650

0

C'è anche una funzione di indicatore di built-in in R

Indicatore (x, min, max)

-Inf e Inf sono ancora i valori validi.