2

データポイントを回答者のグループの平均に接続するrを使用して単純な折れ線グラフを作成しようとしています(また、それらをラベル付けしたり、異なる色で区別したりすることもできます)。私のデータは長い形式で、このようにソートされています(私はそれが任意の値の場合は、ワイド形式でもあります):

    ID  gender  week  class  motivation
    1   male    0     1       100
    1   male    6     1       120
    1   male    10    1       130
    ...
    2   female  0     1       90
    2   female  6     1       NA
    2   female  10    1       117
    ...
    3   male    0     2       89
    3   male    6     2       112
    3   male    10    2       NA
    ...

基本的に、すべての回答者は合計 n 回測定され、機会 (週) は全員で同じでした。一部の回答者は、1 回以上欠席していました。モチベーションのために言いましょう。性別、クラス、ID などの変数は変わりませんが、モチベーションは変わります。ggplot2 で折れ線グラフを取得してみた

 ## define base for the graphs and store in object 'p'
plot <- ggplot(data = DataRlong, aes(x = week, y = motivation, group = gender))
plot + geom_line()

グループ化変数として、たとえばクラスや性別を使用したいと考えています。ただし、私のアプローチでは、グループごとの平均を結ぶ線は得られません。また、測定機会ごとに縦線も取得します。これは何を意味するのでしょうか?これを修正する唯一の方法は、新しい変数 average.motivation を作成し、機会ごとにすべてのグループの平均を計算し、この平均をグループのすべてのメンバーに割り当てることです。ただし、これは、別の要因に基づいてグループ ラインを表示する場合に、すべてのグループ変数に対してこれを行う必要があることを意味します。また、プロットは欠損データをどのように処理しますか? (グループのメンバーの 1 人に欠損値がある場合でも、そのグループの機会全体を省略するのではなく、この機会のグループ平均でポイントを計算したいと考えています)。

編集:ありがとう、dplyr を使用したソリューションは、すべてのカテゴリ変数に対してうまく機能します。現在、2 番目または 3 番目の要素に基づいて線を色付けすることで、サブグループを区別する方法を見つけようとしています。たとえば、「class2」のグループに対して 20 の線をプロットしますが、それらすべてを 20 の異なる色で表示するのではなく、同じタイプのクラス (「class_type」) に属している場合は、同じ色を使用したいと考えています。 、例えば、A、B または C = 20 行、色の 3 つのグループ)。

「mean_data2」に 2 番目の要素を追加しました。それはうまくいきます。次に、ggplot で color 引数を変更しようとしましたが (geom_line の場合も試しました)、20 行もありません。

mean_data2 <- group_by(DataRlong, class2, class_type, occ)%>% summarise(procras = mean(procras, na.rm = TRUE))

ライブラリ(ggplot2) ggplot(na.omit(mean_data2), aes(x = occ, y = procras, color=class2)) + geom_point() + geom_line(aes(colour=class_type))

4

3 に答える 3

5

dplyrパッケージを使用してデータを集計することもできます。

library(dplyr)
mean_data <- group_by(data, gender, week) %>%
             summarise(motivation = mean(motivation, na.rm = TRUE))

次のように値をna.omit()取り除くために使用できます。NA

library(ggplot2)
ggplot(na.omit(mean_data), aes(x = week, y = motivation, colour = gender)) +
  geom_point() + geom_line()

ここに画像の説明を入力

プロット内のカテゴリ変数によって線が自動的にグループ化されるgroupため、美学を明示的に使用する必要はありません。ggplotそして、あなたが持っている唯一のカテゴリ変数はgender. (詳細については、この回答を参照してください)。

于 2016-03-10T17:14:39.807 に答える
3

別の可能性は を使用しているため、 ggplotstat_summaryでのみ実行できます。

ggplot(data = DataRlong, aes(x = week, y = motivation, group = gender)) + 
   stat_summary(geom = "line", fun.y = mean)
于 2018-10-25T23:06:13.397 に答える
2

ほとんどの場合、これらのグループ化変数が因子であることを確認する必要があります。

私はあなたが何を望んでいるのかよくわかりませんが、ここにショットがあります...

library("ggplot2")
df <- read.table(textConnection("ID  gender  week  class  motivation
1   male    0     1       100
1   male    6     1       120
1   male    10    1       130
2   female  0     1       90
2   female  6     1       NA
2   female  10    1       117
3   male    0     2       89
3   male    6     2       112
3   male    10    2       NA"), header=TRUE, stringsAsFactors=FALSE)

df2 <- aggregate(df$motivation, by=list(df$gender, df$week), 
             function(x)mean(x, na.rm=TRUE))
names(df2) <- c("gender", "week", "avg")
df2$gender <- factor(df2$gender)
ggplot(data = df2[!is.na(df2$avg), ], 
       aes(x = week, y = avg, group=gender, color=gender)) + 
  geom_point()+geom_line()

ここに画像の説明を入力

于 2016-03-10T16:09:03.597 に答える