我一直都在做melt
和cast
,这一次,我正在寻找整齐的单线纸。
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
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
当然,这是可行的,但不能通过
hp
和cyl
汇总am
来实现。自从我使用plyr
和reshape
以来已经有一段时间了,所以我有点迷失了自己的肌肉...所以...请原谅,我向我提出了一些琐事... =/ 最佳答案
summmarize
可能是您的 friend :
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
关于r - 使用plyr ojit修正基于重塑的习惯,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7717560/