以ggplot中的钻石数据集为例我想按每种颜色的总价格订购数据框,所以如果这是每种颜色的总价格
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'categories1_.category' in 'field list'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
我想对原始数据框进行排序,以便按照上面相同的顺序显示颜色
所以,如果我们有像这样的原始数据集的样本
H 5000
I 4000
E 1000
J 3000
它应该被分类为类似的东西
carat cut color clarity depth table price
0.23 Ideal E SI2 61.5 55 326
0.21 Premium E SI1 59.8 61 326
0.23 Good E VS1 56.9 65 327
0.29 Premium I VS2 62.4 58 334
0.31 Good J SI2 63.3 58 335
0.24 Very Good J VVS2 62.8 57 336
0.24 Very Good I VVS1 62.3 57 336
0.26 Very Good H SI1 61.9 55 337
因为H颜色的总价格最高,然后我等等。
我可以按每种颜色的总价格订购颜色,但我想订购 数据按颜色设置
如上所述。
我们可以更好地按每个记录的价格进行另一次订购,这样就可以这样了
carat cut color clarity depth table price
0.26 Very Good H SI1 61.9 55 337
0.24 Very Good I VVS1 62.3 57 336
0.29 Premium I VS2 62.4 58 334
0.23 Ideal E SI2 61.5 55 326
0.21 Premium E SI1 59.8 61 326
0.23 Good E VS1 56.9 65 327
0.31 Good J SI2 63.3 58 335
0.24 Very Good J VVS2 62.8 57 336
答案 0 :(得分:2)
使用data.table
我会执行以下操作(使用您提供的数据)
library(data.table)
# convert to `data.table` and assign a TotSum column (per color) by reference
setDT(df)[, TotSum := sum(price), by = color]
# sort your data by total sum (decreasing), color (in case two colors will have the same total price) and by price (decreasing)
setorder(df, -TotSum, color, -price)
df
# carat cut color clarity depth table price TotSum
# 1: 0.23 Good E VS1 56.9 65 327 979
# 2: 0.23 Ideal E SI2 61.5 55 326 979
# 3: 0.21 Premium E SI1 59.8 61 326 979
# 4: 0.24 Very Good J VVS2 62.8 57 336 671
# 5: 0.31 Good J SI2 63.3 58 335 671
# 6: 0.24 Very Good I VVS1 62.3 57 336 670
# 7: 0.29 Premium I VS2 62.4 58 334 670
# 8: 0.26 Very Good H SI1 61.9 55 337 337
在这里,我们为每种颜色创建了一个TotSum
的新列,并按照每个颜色的总和,颜色和价格,通过引用创建了有序df
。
答案 1 :(得分:0)
我不确定我是否完全理解您想要的顺序,但如果首先是按价格,然后按颜色,按降序排列,那么您可以这样做:
library('ggplot2')
library('dplyr')
tst <- dplyr::arrange(diamonds, desc(color), desc(price))
这给出了head(tst)
:
carat cut color clarity depth table price x y z
1 3.01 Premium J SI2 60.7 59 18710 9.35 9.22 5.64
2 3.01 Premium J SI2 59.7 58 18710 9.41 9.32 5.59
3 2.22 Premium J VS1 60.0 60 18706 8.49 8.43 5.08
4 3.51 Premium J VS2 62.5 59 18701 9.66 9.63 6.03
5 2.43 Premium J VS2 62.2 57 18692 8.63 8.54 5.34
6 2.42 Premium J VS2 61.3 59 18615 8.61 8.58 5.27