使用另一个变量中的公式为数据框创建新列

Pun*_*ith 25 r dataframe

我想使用另一个变量的公式为数据框创建一个新列.
示例:
我有一个数据集"aa"是;

x    y 
2    3 
4    5 
6    7 
Run Code Online (Sandbox Code Playgroud)

我的R代码是;

>bb <- "x+y-2" 
>attach(aa) 
>aa$z<- bb 
>detach(aa) 
Run Code Online (Sandbox Code Playgroud)

结果是;

x  y  z 
2  3  x+y-2 
4  5  x+y-2 
6  7  x+y-2 
Run Code Online (Sandbox Code Playgroud)

但我想这样;

x  y  z 
2  3  3 
4  5  7 
6  7  11 
Run Code Online (Sandbox Code Playgroud)

请你帮助我好吗..

Hon*_*Ooi 36

如果要在数据框的上下文中计算表达式,可以使用withwithin.

aa$z <- with(aa, x + y - 2)
Run Code Online (Sandbox Code Playgroud)

要么

aa <- within(aa, z <- x + y - 2)
Run Code Online (Sandbox Code Playgroud)

或者,如果表达式是文本字符串的形式(您应该看看是否有其他方法来编写代码;评估任意文本字符串可能会导致很多问题):

aa$z <- eval(parse(text="x + y - 2"), aa)
Run Code Online (Sandbox Code Playgroud)


Slo*_*ner 8

你或许应该阅读R上的一些基本教程其他介绍至R作为,尽管写的是什么存在的$符号是更明智,更容易比理解attach/detach.在此期间尝试这个.

aa <- data.frame(x = c(2, 4, 6), y = c(3, 5, 7))
Run Code Online (Sandbox Code Playgroud)

这使:

> aa
  x y
1 2 3
2 4 5
3 6 7
Run Code Online (Sandbox Code Playgroud)

然后输入:

aa$z <- (aa$x + aa$y) - 2
Run Code Online (Sandbox Code Playgroud)

这使:

> aa
  x y  z
1 2 3  3
2 4 5  7
3 6 7 11
Run Code Online (Sandbox Code Playgroud)


小智 5

您可以mutatedplyr包中使用

library(dplyr)
aa <- aa %>% mutate(z = x+y-2)
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。