在'中指定data.frame的列;与';呼叫

在'中指定data.frame的列;与';呼叫,r,dataframe,R,Dataframe,是否有一种优雅的方法可以在调用“with”时在data.frame中指定列。例如,我想做这样的事情: > df <- data.frame(x=runif(5), y=runif(5)) > df x y 1 0.4010225 0.1702563 2 0.7204338 0.9929117 3 0.3755553 0.9229862 4 0.2959035 0.3947730 5 0.3273934 0.3680618 > with(

是否有一种优雅的方法可以在调用“with”时在data.frame中指定列。例如,我想做这样的事情:

> df <- data.frame(x=runif(5), y=runif(5))
> df
          x         y
1 0.4010225 0.1702563
2 0.7204338 0.9929117
3 0.3755553 0.9229862
4 0.2959035 0.3947730
5 0.3273934 0.3680618
> with(df, y <- cumsum(x))
> df
          x         y
1 0.4010225 0.1702563
2 0.7204338 0.9929117
3 0.3755553 0.9229862
4 0.2959035 0.3947730
5 0.3273934 0.3680618

您可以在中使用
变换
。在这两种情况下,如果希望结果保持不变,则必须将结果分配回
df

> transform(df, y=cumsum(x))
          x         y
1 0.7430507 0.7430507
2 0.2858004 1.0288512
3 0.9565152 1.9853664
4 0.4379119 2.4232783
5 0.6885749 3.1118532
> within(df, y <- cumsum(x))
          x         y
1 0.7430507 0.7430507
2 0.2858004 1.0288512
3 0.9565152 1.9853664
4 0.4379119 2.4232783
5 0.6885749 3.1118532

注意我们
rm(z)
,否则会在
df
中添加另一列。如有疑问,请阅读
?with
帮助页面。你会在()中找到
以及对差异的讨论。谢谢@BrodieG,这是单列计算的好答案。我编辑了我的问题来指定多栏计算,如RooSo.@ CornedBeefHashMap,你应该考虑问一个单独的问题。
> transform(df, y=cumsum(x))
          x         y
1 0.7430507 0.7430507
2 0.2858004 1.0288512
3 0.9565152 1.9853664
4 0.4379119 2.4232783
5 0.6885749 3.1118532
> within(df, y <- cumsum(x))
          x         y
1 0.7430507 0.7430507
2 0.2858004 1.0288512
3 0.9565152 1.9853664
4 0.4379119 2.4232783
5 0.6885749 3.1118532
df <- within(df, {z <- x * 2; y <- cumsum(z); rm(z)})