Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Indicator function in R

Tags:

function

r

I'm looking for an indicator function in R, i.e. a function that returns a 1, if the value of an element in a vector is greater than 0 and returns zero, if the value of an element in a vector is less than 0.

I need to use this function on all elements in a vector returning a new vector with only zeros and ones.

Thanks.

like image 924
Ku-trala Avatar asked Nov 20 '13 12:11

Ku-trala


3 Answers

There are a variety of ways, the minimal keystroke one:

  Ivec <- 0+(vec>0)

Saves a couple of keystrokes over: as.numeric(vec>0). I would guess the ifelse(x>0,1,0)-approach would be somewhat slower if applied to a large vector or if used in simulations. Could also use:

 Ivec <- 1*(vec>0)
like image 119
IRTFM Avatar answered Oct 31 '22 14:10

IRTFM


If i am able to understand you correctly then you want to make changes into entire data frame,assuming of which i can suggest you to use apply like below, where df is your data frame.

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

You can also use if its for only one vector something like below:

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

Hope this helps

like image 32
PKumar Avatar answered Oct 31 '22 14:10

PKumar


The I function in R, called the Inhibit Interpretation/Conversion of Objects function, can be used for this purpose. For instance, the line below returns the values for the function I(x < 4) where X = {0, 1, 2, 3, 4, 5}:

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

In R TRUE and FALSE can be treated as 1 and 0s, but if you insist on your output being precisely those numbers, just wrap your I function into as.numeric.

like image 29
Waldir Leoncio Avatar answered Oct 31 '22 13:10

Waldir Leoncio