如何在函数内的数据框中添加列

时间:2011-06-15 13:30:06

标签: r

我有一个数据框,我想用现有的列进行一些计算,并在我的数据集中创建新列,这是现有的组合...我可以在函数外轻松完成这个...但是如果我换行函数中的代码,我所做的更改(内部函数)在函数外部是不可见的...即新列不存在...

我希望示例代码能够做到这一点......

2 个答案:

答案 0 :(得分:7)

我假设它是关于R ... R不通过引用传递参数(环境和引用类(S5)是一个例外,但这超出了当前的抽象范围)。因此,当你写

addThree<-function(x){
 x<-x+3
}
4->y
addThree(y)

y在代码末尾仍然是4,因为在函数内部,xy s值的新副本,而不是y本身(同样,不完全是,但那些是更高阶的细节。)

因此,您必须适应R的pass-by-copy方案并返回更改后的值并将其分配回您的变量(使用旧的措辞,R中没有程序):

addThree<-function(x){
 return(x+3)
}
4->y
addThree(y)->y
#y is now 7

请不要担心,对于更复杂的对象,这种方法可以顺利运行,因为R是垃圾收集并且具有惰性评估。

顺便说一句,如果你想返回函数中产生的最后一个值,你可以省略return,即addThree的定义可能如下所示:

addThree<-function(x) x+3

答案 1 :(得分:1)

最好的方法是使用dplyr库中的mutate()。例如:

addcol = function(dat){
    dat1 = mutate(dat, x2=x1*2)
    return(dat1)
}

dat是一个数据框,其中一列名为&#34; x1&#34;。使用此函数addcol(),新数据集现在有一个名为&#34; x2&#34;的新列。这是&#34; x1&#34;的两倍,假设x1是数字。