在transform中引用新列

Loo*_*eft 8 variables r transform

我有一个包含标记为A,B和C的列的数据框.我想添加从现有列和新列本身计算的新列.为此,我尝试使用如下变换函数:

Data = transform(Data,
          NewD = A + B,
          NewE = C * NewD
)
Run Code Online (Sandbox Code Playgroud)

但是这给出了一个错误:

eval中的错误(expr,envir,enclos):找不到对象'NewD'

我也试过像这样的cbind函数:

NewD = Data$A + Data$B,
NewE = Data$C * New$D
Data=cbind(Data,NewD,NewE)
Run Code Online (Sandbox Code Playgroud)

但是当附加列(函数)的数量增加时,它变得很麻烦.

如何在转换函数中引用NewD,或者是否有更好的方法来应用这样的多个函数.我希望Data包含A,B,C,NewD和NewE列,而不必多次调用转换函数.

Kar*_* W. 6

也许这样的事情

d <- data.frame(a=1:5, b=6:10)
transform(d, c=tmp <- a+b, e=b*tmp)
Run Code Online (Sandbox Code Playgroud)

可以?


Ram*_*ath 5

哈德利mutate在他的plyr包装中有一个功能就是这样.这是@Karsten使用的相同示例mutate.我觉得mutate代码对于这些任务更具可读性,因为它不需要任何临时赋值.

require(plyr)
d = data.frame(a = 1:5, b = 6:10)
mutate(d, c = a + b, d = b * c, e = c * d)
Run Code Online (Sandbox Code Playgroud)