2013-09-25 5 views
15

別の変数の式を使用してデータフレームに新しい列を作成したいとします。
例:
データセット「aa」があります。別の変数の式を使用してデータフレームに新しい列を作成する

x y 
2 3 
4 5 
6 7 

私のRコードは;

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

結果は次のとおりです。

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

しかし、私はこのようにしたい。

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

あなたはおそらく$表記は、より賢明かつattach/detachより理解しやすいですが書かれているにもかかわらず、R としてAn Introduction to Rより上のいくつかの基本的なチュートリアルをお読みください。..

答えて

22

あなたはコンテキストで式を評価したい場合は、のデータフレーム、を使用することができます3210およびwithin

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

または

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

それとも、あなたの表現は、テキスト文字列の形式である場合、あなたのコードを書くために他の方法がある場合は(あなたが見るべきである;任意のテキスト文字列を評価することはたくさんにつながることができます

aa$z <- eval(parse(text="x + y - 2"), aa) 
+0

ありがとうございました。 aa $ z < - eval(parse(text = "x + y - 2")、aa)このコードは正しく機能しました。ここでは、式を含む変数名を与えることができます。 – Punith

6

を私を助けてもらえ。その間に試してみてください。

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

与える:

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

次のように入力します。

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

与える:

> aa 
    x y z 
1 2 3 3 
2 4 5 7 
3 6 7 11 
+0

はい、これは私が知っています。しかし、それは別の変数から数式を取ることはありません。 – Punith

+0

ああ、謝罪、私のところでの誤解 - 他の答えによると 'eval'は確かにあなたが望むものです。 – SlowLearner

+0

申し訳ありません。あなたは私に提案をしています...答えてくれてありがとう... – Punith

3

あなたは

dplyrパッケージ からmutateを使用することができます。問題)の
library(dplyr) 
aa <- aa %>% mutate(z = x+y-2) 

希望します。

関連する問題