3

データフレームがあり、変数の 1 つ (Q1 と呼びましょう) には、「使用しない」、「30 分」、「1 時間」、「2 時間」、「3 時間以上」といういくつかのレベルがあります。

バーが因子レベルの順序になっている barplot() をプロットするにはどうすればよいですか? sort() を使用してみましたが、うまくいきません。

編集: 要求に応じて、いくつかのサンプル データ:

Q1
1 hour
1 hour
30 min
2 hours
3+ hours
3+ hours
3+ hours
3+ hours
2 hours
1 hour
2 hours
1 hour
30 min

私はもう試した:

barplot(table(sort(Q1)), main = "Q1 Answer Distribution", ylim = c(0, 250), cex.axis=0.9)

しかし、それは私が必要とするものを私に与えません。

4

2 に答える 2

6

1 つの可能性は、希望する順序でfactor指定する Q1 のバージョンを作成することです。levels

df$Q1_fac <- factor(df$Q1, levels = c("30 min", "1 hour",  "2 hours", "3+ hours"))

tt <- table(df$Q1_fac)
tt
# Q1_fac
# 30 min   1 hour  2 hours 3+ hours 
#      2        4        3        4    

barplot(tt)

ここに画像の説明を入力

于 2013-10-30T13:12:36.760 に答える
4

Henrik が述べたように、データを因子に入れる必要があります (少なくとも、これが最も簡単な方法です)。いくつかの偽のデータを使用した次の例を考えてみましょう...

#generate 1000 random uniform integers between 1 and 5
data <- floor(runif(1000, 1,6)) 

#make data a factor with given labels
fdata <- factor(data,
                labels = c("No use", 
                           "30 min", 
                           "1 hour", 
                           "2 hours", 
                           "3+ hours"))

これは、プロットを使用してベース r で実行できます (y が指定されていない場合、barplot は必要ありません)。

#in base R, just use plot - when y is missing, barplot is produced
plot(fdata)

ggplot2 でプロットすることもできます

#in ggplot2
require(ggplot2)

#make a dataframe
df <- data.frame(id = seq(1:length(fdata)),
                 fdata = fdata)

#plot via geom_bar
ggplot(df, aes(fdata)) + geom_bar()

ordered=TRUE元の例から進んで、レベルを指定することに加えて、以下に示すように設定する必要があります。そうしないと、「使用しない」がリストの最後に表示されます。

#get data into a factor (provided data plus "No use")
q1 <- c("No use"
        ,"1 hour"
        ,"1 hour"
        ,"30 min"
        ,"2 hours"
        ,"3+ hours"
        ,"3+ hours"
        ,"3+ hours"
        ,"3+ hours"
        ,"2 hours"
        ,"1 hour"
        ,"2 hours"
        ,"1 hour"
        ,"30 min")

q1f = factor(q1,
             levels = c("No use", 
                          "30 min", 
                          "1 hour", 
                          "2 hours", 
                          "3+ hours"),
             ordered=TRUE)

次に、上記のプロット ロジックを適用できます...

于 2013-10-30T13:17:59.830 に答える