Wickham的ggplot2:数据分析的优雅图形的第158页,陈述了这个例子:
ddply(钻石,(颜色),子集,顺序(克拉)LT; = 2)
钻石数据集非常庞大:
> nrow(diamonds)
[1] 53940
所以我选择了一个小样本:
library(plyr)
library(ggplot2)
set.seed(123)
rows=sample(nrow(diamonds),50)
mydiamonds=diamonds[rows,]
然后我在我的套装上尝试了他的命令。
> ddply(mydiamonds,.(color),subset,order(carat)<=2)
carat cut color clarity depth table price x y z
1 0.51 Ideal D VS2 61.2 55 1882 5.18 5.16 3.16
2 0.58 Ideal D VVS1 61.6 60 3154 5.34 5.35 3.29
3 0.70 Premium E SI1 59.7 60 2394 5.81 5.79 3.46
4 0.42 Ideal E SI2 62.9 56 898 4.80 4.77 3.01
5 0.40 Premium F SI1 61.2 58 945 4.74 4.71 2.89
6 0.61 Premium F SI1 60.4 56 1359 5.47 5.43 3.29
7 1.52 Premium G VS2 62.6 55 12958 7.39 7.28 4.59
8 0.33 Ideal G VVS1 61.5 56 868 4.45 4.46 2.74
9 0.71 Ideal H IF 62.0 54 3190 5.71 5.75 3.55
10 1.04 Ideal H VS2 60.7 56 5805 6.56 6.61 4.00
11 0.70 Ideal I SI1 61.8 57 2436 5.67 5.72 3.52
12 0.31 Ideal I SI1 62.5 56 537 4.35 4.29 2.70
13 1.35 Premium J VS2 60.5 56 6254 7.19 7.12 4.33
14 0.57 Premium J VS2 60.2 62 1176 5.40 5.33 3.23
请注意,颜色H的两个最小克拉尺寸分别为0.71和1.04。但是,请考虑以下事项:
> subset(mydiamonds,color=="H")
carat cut color clarity depth table price x y z
22060 1.74 Very Good H SI2 62.1 59 10086 7.65 7.78 4.79
50726 0.70 Ideal H SI1 62.5 56 2294 5.64 5.69 3.54
2458 0.71 Ideal H IF 62.0 54 3190 5.71 5.75 3.55
38201 0.44 Very Good H VVS1 63.1 56 1016 4.83 4.87 3.06
29333 0.31 Premium H VS1 62.6 60 698 4.32 4.30 2.70
17151 1.50 Good H SI2 60.8 64 6846 7.27 7.20 4.40
12485 1.07 Very Good H VS2 61.5 57 5254 6.57 6.63 4.06
14334 1.04 Ideal H VS2 60.7 56 5805 6.56 6.61 4.00
请注意,这表明我没有使用ddply命令选择两种颜色为H的最小克拉钻石。
那么,这是书中的错误还是我对这个问题的误解?什么是正确使用ddply从我的数据集中选择每种颜色的两个最小的钻石?
答案 0 :(得分:0)
确实它不会返回最小的克拉,而只是列表中的第一批克拉。
要获得两个最小的克拉,您需要获取order函数返回的两个第一个值。以下代码似乎有效:
ddply(mydiamonds,.(color), function(df) df[with(df, order(carat))[1:2], ])
carat cut color clarity depth table price x y z
1 0.40 Ideal D VS2 61.6 57 982 4.71 4.77 2.92
2 0.50 Fair D SI1 65.7 56 1323 5.01 4.97 3.28
3 0.30 Ideal E VS1 62.5 56 778 4.30 4.28 2.68
4 0.32 Very Good E SI1 63.3 55 672 4.36 4.33 2.75
5 0.40 Premium F SI1 61.2 58 945 4.74 4.71 2.89
6 0.61 Premium F SI1 60.4 56 1359 5.47 5.43 3.29
7 0.32 Ideal G VVS2 61.6 56 708 4.42 4.44 2.73
8 0.33 Ideal G VVS1 61.5 56 868 4.45 4.46 2.74
9 0.31 Premium H VS1 62.6 60 698 4.32 4.30 2.70
10 0.44 Very Good H VVS1 63.1 56 1016 4.83 4.87 3.06
11 0.31 Ideal I SI1 62.5 56 537 4.35 4.29 2.70
12 0.70 Ideal I SI1 61.8 57 2436 5.67 5.72 3.52
13 0.57 Premium J VS2 60.2 62 1176 5.40 5.33 3.23
14 1.35 Premium J VS2 60.5 56 6254 7.19 7.12 4.33