33

Rを使用して、中央値でソートされた一連の箱ひげ図を作成したいと思います。次に、次のように実行するとします。

boxplot(cost ~ type)

これにより、コストがy軸に表示され、タイプカテゴリがx軸に表示される場合に、いくつかの箱ひげ図が得られます。

-----     -----
  |         |
 [ ]        |
  |        [ ]
  |         |
-----     -----
  A         B

ただし、私が欲しいのは、箱ひげ図の数値を中央値の高いものから低いものへと並べ替えたものです。タイプ(AまたはB)のラベルを変更して、中央値の最小値と最大値を数値で示す必要があるのではないかと疑っていますが、問題を解決するためのより賢い方法があるのではないかと思います。

4

3 に答える 3

48

チェックアウト?reorder。例はあなたが望むもののようですが、逆の順序でソートされています。以下の最初の行を変更-countして、希望の順序で並べ替えました。

  bymedian <- with(InsectSprays, reorder(spray, -count, median))
  boxplot(count ~ bymedian, data = InsectSprays,
          xlab = "Type of spray", ylab = "Insect count",
          main = "InsectSprays data", varwidth = TRUE,
          col = "lightgray")
于 2010-09-22T02:54:09.280 に答える
13

はい、それがアイデアです。

> set.seed(42)                     # fix seed       
> DF <- data.frame(type=sample(LETTERS[1:5], 100, replace=TRUE), 
+                  cost=rnorm(100)) 
>
> boxplot(cost ~ type, data=DF)    # not ordered by median
>
> # compute index of ordered 'cost factor' and reassign          
> oind <- order(as.numeric(by(DF$cost, DF$type, median)))    
> DF$type <- ordered(DF$type, levels=levels(DF$type)[oind])   
>
> boxplot(cost ~ type, data=DF)    # now it is ordered by median
于 2010-09-22T02:54:36.907 に答える
0

欠落している値に注意してください。機能させるには、値を追加する必要がありますna.rm = TRUE。そうでない場合、コードは単に機能しません。それを見つけるのに何時間もかかりました。

  bymedian <- with(InsectSprays, reorder(spray, -count, median, **na.rm = TRUE**)
  boxplot(count ~ bymedian, data = InsectSprays,
          xlab = "Type of spray", ylab = "Insect count",
          main = "InsectSprays data", varwidth = TRUE,
          col = "lightgray")
于 2016-08-24T13:41:08.647 に答える