用plyr修复基于重塑的习惯:熔化/铸造与ddply

aL3*_*3xa 6 r aggregate-functions aggregation plyr reshape

我用来做那种-的meltcast所有的时间,而这个时候,我正在寻找一个整齐的衬垫.

require(reshape)
# first I melt some data:
m <- melt(mtcars, id.vars = c("cyl", "am"), measure.vars = "hp")
# then cast it:
cast(m, cyl + am ~ ., each(min, mean, sd, max))
  cyl am min      mean       sd max
1   4  0  62  84.66667 19.65536  97
2   4  1  52  81.87500 22.65542 113
3   6  0 105 115.25000  9.17878 123
4   6  1 110 131.66667 37.52777 175
5   8  0 150 194.16667 33.35984 245
6   8  1 264 299.50000 50.20458 335
Run Code Online (Sandbox Code Playgroud)

这是可能的ddply还是smth?我非常渴望一个班轮.我试过了:

ddply(mtcars, cyl + am ~ hp, each(min, max))
   cyl am  hp min   max
1    4  0  62   0 146.7
2    4  0  95   0 140.8
3    4  0  97   0 120.1
4    4  1  52   1  75.7
5    4  1  65   1  71.1
6    4  1  66   1  79.0
7    4  1  91   0 120.3
8    4  1  93   1 108.0
9    4  1 109   1 121.0
10   4  1 113   1 113.0
11   6  0 105   0 225.0
12   6  0 110   0 258.0
13   6  0 123   0 167.6
14   6  1 110   0 160.0
15   6  1 175   0 175.0
16   8  0 150   0 318.0
17   8  0 175   0 400.0
18   8  0 180   0 275.8
19   8  0 205   0 472.0
20   8  0 215   0 460.0
21   8  0 230   0 440.0
22   8  0 245   0 360.0
23   8  1 264   0 351.0
24   8  1 335   0 335.0
Run Code Online (Sandbox Code Playgroud)

当然,这是有效的,但不是hp通过cyl和总结am.我用了一段时间plyr,reshape所以我有点失去了我的肌肉...所以... 借口 - moi pour une question triviale ... = /

Cha*_*ase 12

summmarize 可能是你的朋友:

ddply(m, c("cyl", "am"), summarize
      , min = min(value)
      , mean = mean(value)
      , sd = sd(value)
      , max = max(value)
)

  cyl am min      mean       sd max
1   4  0  62  84.66667 19.65536  97
2   4  1  52  81.87500 22.65542 113
3   6  0 105 115.25000  9.17878 123
4   6  1 110 131.66667 37.52777 175
5   8  0 150 194.16667 33.35984 245
6   8  1 264 299.50000 50.20458 335
Run Code Online (Sandbox Code Playgroud)


ROL*_*OLO 6

使用plyr:

> require(plyr)
> ddply(mtcars,c("cyl","am"),summarise, min=min(hp), mean=mean(hp), sd=sd(hp), max=max(hp))
  cyl am min      mean       sd max
1   4  0  62  84.66667 19.65536  97
2   4  1  52  81.87500 22.65542 113
3   6  0 105 115.25000  9.17878 123
4   6  1 110 131.66667 37.52777 175
5   8  0 150 194.16667 33.35984 245
6   8  1 264 299.50000 50.20458 335
Run Code Online (Sandbox Code Playgroud)

  • 对不起伙伴,@ Chase击败了你3秒钟,所以他得到了复选标记.= /但是很多! (3认同)