【问题标题】:reordering a factor in r based on a subset of the rows根据行的子集对 r 中的因子重新排序
【发布时间】:2015-09-27 02:35:26
【问题描述】:

我有数据比较美国黑色星期五和加拿大节礼日的销售额。对于每个购物假期,我都有一个包含流行商品的数据框,我将它们组合在一起。我还有一个大致百分比的广告,每个假期都会有所不同。数据框如下所示:

    +---------+----------+-----------+---------+
    |  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、笔记本电脑、电视)。我希望订购的是(电视、笔记本电脑、搅拌机、DVD)。

我想在 Boxing Day 订购 AmtSold 的 ITEM factor。你能帮我用重新排序来做到这一点吗?

谢谢。

编辑

一些评论者问我输出数据框会是什么样子。澄清一下,我不知道也不关心我是否重新排序数据框。我将这些数据放入 ggplot2 并制作条形图。像这样:

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

正如答案to this question about ggplot2 bar graphs on factorsggplot2 中所说明的那样,根据字母(或者可能是字母数字?)排序对因子变量进行排序。

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

我想要在节礼日按销售量(从高到低)顺序排列的条形图,这个顺序: 电视、笔记本电脑、搅拌机、DVD

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

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

但我想以编程方式进行。

【问题讨论】:

  • 你还没有完成你的工作来提出一个好的 R 问题。它应该包括一个简单的自包含示例。
  • 感谢您的反馈 - 修改完成
  • 您能否说明这种重新排序将对您的示例 data.frame 产生什么影响?
  • 好问题。我不关心它将如何改变数据框。我实际上遇到了这个问题:stackoverflow.com/questions/3253641/…
  • 我理解答案,但不足以使重新排序部分适应我的特殊需求

标签: r


【解决方案1】:
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 ~ .)

【讨论】:

  • 感谢您的回答。确实,它适用于我说明的示例,但是我正在使用的数据集实际上有数百个项目,为了简单起见,我已经删除了这些项目。手动执行此操作没有意义。对于造成的混乱,我深表歉意。
  • 那你要的顺序是什么??这不是行的顺序。
  • @jihoward 这太棒了!这正是我正在寻找的。谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2021-11-14
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多