39

I want to create a new column to a data frame using a formula from another variable.
Example:
I have a data set "aa" is;

x    y 
2    3 
4    5 
6    7 

My R code is;

>bb <- "x+y-2" 
>attach(aa) 
>aa$z<- bb 
>detach(aa) 

the result is;

x  y  z 
2  3  x+y-2 
4  5  x+y-2 
6  7  x+y-2 

but I want like this;

x  y  z 
2  3  3 
4  5  7 
6  7  11 

Could you please help me..

Eric Pohl
  • 2,324
  • 1
  • 21
  • 31
Punith
  • 623
  • 2
  • 10
  • 13

3 Answers3

45

If you want to evaluate an expression in the context, of a data frame, you can use with and within.

aa$z <- with(aa, x + y - 2)

or

aa <- within(aa, z <- x + y - 2)

Or, if your expression is in the form of a text string (you should see if there are other ways to write your code; evaluating arbitrary text strings can lead to lots of problems):

aa$z <- eval(parse(text="x + y - 2"), aa)
Hong Ooi
  • 56,353
  • 13
  • 134
  • 187
  • Thank you so much. aa$z <- eval(parse(text="x + y - 2"), aa) this code worked properly. Here we can give the variable name which containing formula. – Punith Sep 25 '13 at 09:17
11

you can use mutate from the package dplyr

library(dplyr)
aa <- aa %>% mutate(z = x+y-2)

Hope it helps.

Vinay B
  • 341
  • 3
  • 6
9

You should probably read some basic tutorials on R other than An Introduction to R as despite what is written there the $ notation is more sensible and easier to understand than attach/detach. Try this in the meantime.

aa <- data.frame(x = c(2, 4, 6), y = c(3, 5, 7))

Which gives:

> aa
  x y
1 2 3
2 4 5
3 6 7

Then enter:

aa$z <- (aa$x + aa$y) - 2

Which gives:

> aa
  x y  z
1 2 3  3
2 4 5  7
3 6 7 11
SlowLearner
  • 7,907
  • 11
  • 49
  • 80