0

3つのオプションから選択するユーザーを表す以下の(簡略化された)データから、値の係数に基づいて、ユーザーが値を選択した回数のパーセンテージの箱ひげ図のセットを作成します。したがって、3つの箱ひげ図が必要です。ユーザーが0、1、2を選択した割合です。

Rでよく行うように、明らかな何かが欠けていると確信しています。を使用してパーセンテージを取得できますが、by(dat, dat$user, function(user) {table(user$value)/length(user$value)*100})それを箱ひげ図に変換する方法がわかりません。

それが理にかなっていることを願っています。

user|value
1|2
1|1
1|0
1|2
1|0
2|2
2|2
2|2
2|0
2|2
3|2
3|0
3|1
3|0
3|1
4|2
4|0
4|1
4|0
4|1
5|2
5|0
5|1
5|0
5|1
6|2
6|0
6|0
6|1
6|2
7|0
7|0
7|1
7|0
7|1
8|2
8|2
8|1
8|1
8|2
9|1
9|0
9|0
9|0
9|0
10|1
10|2
10|0
10|2
10|1
4

2 に答える 2

1

plyrパッケージを使用して要約を作成することをお勧めします。まず、係数に変換する必要がありますvalue。これにより、一部のユーザーが値を選択しなかった場合、その値は0%になります。

dat$value <- factor(dat$value)

ここで、データフレームを取得するサマリー関数を記述します(技術的には、このステップを次のステップにスマッシュすることができますが、この方法の方が読みやすくなります)。

p.by.user <- function(df){
  data.frame(prop.table(table(df$value)))
}

次に、この関数をでdat定義されたのすべてのサブセットに適用しますuser

dat.summary <- ddply(dat, .(user), p.by.user)

このデータの基本的なグラフィックボックスプロットは、次のように実行されます。

with(dat.summary, boxplot(Freq ~ Var1, ylim = c(0,1)))

私の2セントを気にしないのであれば、箱ひげ図がこの種のデータを処理する正しい方法であるかどうかはわかりません。これはあまり密度の高いデータではなく(サンプルが現実的である場合)、箱ひげ図は決定間の依存関係をキャプチャしません。つまり、一部のユーザーが1非常に頻繁に選択した場合、他のユーザーはそれほど頻繁に選択しなかったに違いありません。

ユーザーごとに塗りつぶされた棒グラフを試すことができます。を使用する場合は、事前の要約は必要ありませんggplot2。コードは次のようになります

ggplot(dat, aes(factor(user), fill = value)) + geom_bar()
    # or, to force the range to be between 0 and 1
    # + geom_bar(position = "fill")
于 2010-09-08T03:23:39.627 に答える
0

あなたが探しているのはこのようなものですか?

user <- rep(1:10,each=5)
value <- sample(0:2,50,replace=T)
dat <- data.frame(user,value)

percent <- unlist(
    by(dat, dat$user,
        function(user) {
            table(user$value)/length(user$value)*100
        }
    )
)

# make a vector with all percentages
percent <- unlist(percent)
# extract the necessary info from the names
value <- gsub("\\d+\\.(\\d)","\\1",names(percent))

boxplot(percent~value)
于 2010-09-08T08:01:35.900 に答える