簡體   English   中英

在“ with”調用中分配data.frame列

[英]Assigning column of data.frame in 'with' call

有沒有一種優雅的方法可以在對“ 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 $ y將是df $ x的累加和。 我知道df$y <- cumsum(df$x)對於這樣一個瑣碎的示例將很好地工作,但是隨着事情變得越來越復雜,具有上述內容將變得更加簡單。 有一個好的解決方案嗎?


編輯以指定多列計算。

有什么方法可以從within進行多列計算而不必重述data.frame名稱? 例如

> df <- data.frame(a=runif(5), b=runif(5), c=runif(5))
> df
          a          b          c
1 0.4470582 0.57788300 0.06578355
2 0.6694826 0.13988892 0.80460530
3 0.7300993 0.78663734 0.68503691
4 0.6825741 0.07943231 0.02903320
5 0.6384533 0.42809113 0.26117171
> within(df, { x <- cumsum(a); y <- rowSums(df[,1:2]) })
          a          b          c         y         x
1 0.4470582 0.57788300 0.06578355 1.0249412 0.4470582
2 0.6694826 0.13988892 0.80460530 0.8093715 1.1165408
3 0.7300993 0.78663734 0.68503691 1.5167366 1.8466401
4 0.6825741 0.07943231 0.02903320 0.7620064 2.5292142
5 0.6384533 0.42809113 0.26117171 1.0665445 3.1676675

您可以使用transformwithin 在這兩種情況下,如果您要保留結果,都必須將結果分配回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

這是一個實際上修改df的更復雜的示例:

df <- within(df, {z <- x * 2; y <- cumsum(z); rm(z)})

注意我們rm(z) ,否則將向df添加另一列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM