在使用 R 时,我经常对在 data.frame 上执行操作感兴趣,我在其中按组汇总变量,然后想将这些汇总值添加回 data.frame。这很容易通过示例显示:
myDF <- data.frame(A = runif(5), B = c("A", "A", "A", "B", "B"))
myDF$Total <- with(myDF, by(A, B, sum))[myDF$B]
myDF$Proportion <- with(myDF, A / Total)
产生:
A B Total Proportion
1 0.5272734 A 1.7186369 0.3067975
2 0.5105128 A 1.7186369 0.2970452
3 0.6808507 A 1.7186369 0.3961574
4 0.2892025 B 0.6667133 0.4337734
5 0.3775108 B 0.6667133 0.5662266
这个技巧——本质上是得到一个命名值的向量,并按组在相关行中“传播”或“拉伸”它们——通常是有效的,尽管class(myDF$Total)
除非"array"
我把.by()
c()
我想知道:
- 此操作是否有常用名称?
- 是否有另一种不那么老套的感觉和/或更快的方法来做到这一点?
- 有没有办法做到这一点
dplyr
?也许有一个我不知道的哈德利批准的动词操作(如变异、排列等)。我知道这很容易summarise()
,但我经常需要将这些摘要放回 data.frame。