根据行

时间:2015-09-27 02:35:27

标签: r

我有数据比较美国黑人星期五和加拿大节礼日的销售情况。对于每个购物假期,我都有一个包含热门项目的数据框,我已将其合并。我也有大约百分比的广告,每个假期都不同。数据框如下所示:

    +---------+----------+-----------+---------+
    |  Item   | AdBudget |  Holiday  | AmtSold |
    +---------+----------+-----------+---------+
    | TV      | $1000    | BlackFri  | 1800    |
    | Laptop  | $2300    | BlackFri  | 1400    |
    | DVDs    | $100     | BlackFri  | 300     |
    | Blender | $200     | BlackFri  | 50      |
    | TV      | $1200    | BoxingDay | 1000    |
    | Laptop  | $1200    | BoxingDay | 850     |
    | Blender | $500     | BoxingDay | 76      |
    | DVDs    | $400     | BoxingDay | 35      |
    +---------+----------+-----------+---------+

项目因子的自动排序是按字母顺序排列的(即Blender,DVD,Laptop,TV)。我希望订购(电视,笔记本电脑,搅拌机,DVD)。

我想在节礼日由AmtSold订购ITEM因子。你能帮我用重新订购吗?

谢谢。

修改

有几位评论者问我输出数据框是什么样的。为了澄清,我不知道也不关心我是否重新排序数据帧。我将这些数据放入ggplot2并制作条形图。像这样:

    ggplot(dataframe,aes(x=Item,y=AmtSold))
    +geom_bar(stat="identity") 
    + facet_grid(Holiday ~ .)

如答案to this question about ggplot2 bar graphs on factors中所示,ggplot2根据字母(或可能是字母数字?)顺序对因子变量进行排序。

就我而言,这意味着我的条形图将按以下顺序排列: 搅拌机,DVDS,笔记本电脑,电视

我希望在节礼日销售量(从最高到最低)的顺序,这个顺序: 电视,笔记本电脑,搅拌机,DVD

一种可能性是明确地这样做

    dataframe$Item <- factor(dataframe$Item, levels = c("TV","Laptop","Blender","DVDs"))

但我想以编程方式进行。

1 个答案:

答案 0 :(得分:2)

lvls <- as.character(df$Item[df$Holiday=="BoxingDay"])[order(df$AmtSold[df$Holiday=="BoxingDay"])]
df$Item <- factor(df$Item,levels=lvls)
library(ggplot2)
ggplot(df,aes(x=Item,y=AmtSold))+
  geom_bar(aes(fill=Holiday), stat="identity") +
  facet_grid(Holiday ~ .)