Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a new variable in a data.frame based on a condition?

Tags:

dataframe

r

Assume we have a dataframe

x   y
1   1
2   4 
4   5 

how can you add a new variable to the dataframe such that if x is less than or equal to 1 it returns "good" if x is between 3 and 5 it returns "bad" else returns "fair"

x   y  w
1   1  "good"
2   2   "fair"
5   5   "bad"

Applied the method shown by ocram., however this one here does not work.

d1 <- c("e", "c", "a")
d2 <- c("e", "a", "b")

w <- ifelse(d1 == "e" & (d2=="e"), 1, ifelse((d1 == "a") & (d2 =="b"), 2, ifelse(d1 == "e"),3,99))

Any ideas? Thanks

like image 765
eastafri Avatar asked Apr 19 '11 08:04

eastafri


1 Answers

One obvious and straightforward possibility is to use "if-else conditions". In that example

x <- c(1, 2, 4)
y <- c(1, 4, 5)
w <- ifelse(x <= 1, "good", ifelse((x >= 3) & (x <= 5), "bad", "fair"))
data.frame(x, y, w)

** For the additional question in the edit** Is that what you expect ?

> d1 <- c("e", "c", "a")
> d2 <- c("e", "a", "b")
> 
> w <- ifelse((d1 == "e") & (d2 == "e"), 1, 
+    ifelse((d1=="a") & (d2 == "b"), 2,
+    ifelse((d1 == "e"), 3, 99)))
>     
> data.frame(d1, d2, w)
  d1 d2  w
1  e  e  1
2  c  a 99
3  a  b  2

If you do not feel comfortable with the ifelse function, you can also work with the if and else statements for such applications.

like image 122
Marco Avatar answered Oct 21 '22 07:10

Marco