2017-01-04 3 views
-3

と複数の列を可視化:等...、...、product_idp1p2p3 P-列のみ0又は1などを有していますそれらの細胞データ。R:私は、次の列を有するデータフレームを有するそれらの合計

Iはまとめて(又はカウント)棒グラフp1p2等をしたいと(ggplotで)和の値を有するバーとして各P型カラムを示しています。

さらに、product_idで色を入力したいと思います。

長い形式のデータを再整形するのは参考になるかもしれませんが、まだ固執しています。

ここですでに整形、最小限のデータセットです:

product_id <- c(1, 2, 3, 1, 2, 3, 1, 2, 3) 
p1 <- c(0, 0, 1, 1, 0, 0, 1, 0, 0) 
p2 <- c(1, 0, 1, 0, 1, 0, 1, 1, 0) 
p3 <- c(0, 0, 1, 1, 0, 1, 0, 1, 1) 

df1 <- data.frame(product_id, p1, p2, p3) 

df2 <- melt(df1, id.vars = "product_id", 
        measure.vars = grep("^p[0-9]", names(df1), value = TRUE), 
        variable.name = "p", 
        value.name = "p-active") 

答えて

3

私は正確に何をしたい理解わからないんだけど、私はそれを試してみるよ:

私は整形aを変更それは、データフレームの列の名前で-を使用するのは良い考えではないので少し、:

df2 <- melt(df1, id.vars = "product_id", 
        measure.vars = grep("^p[0-9]", names(df1), value = TRUE), 
        variable.name = "p", 
        value.name = "p_active") 

次のステップは、で値を合計することです

library(dplyr) 
df2_summed <- group_by(df2, product_id, p) %>% 
       summarise(p_active_summed = sum(p_active)) 

そして最後に、私はプロットを作成します。:3210 pproduct_idの値ごと

library(ggplot2) 
ggplot(df2_summed, aes(x = p, y = p_active_summed, fill = as.factor(product_id))) + 
    geom_col() 

​​

+0

私にそれを打つ - これとほぼ同じコードを投稿しようとしていた。 –

+0

@AndrewHaynes申し訳ありません。それでも、エレガンスになるとローランドに殴られました... – Stibu

4

ありggplot2チュートリアルの数十がありますが、私は寛大な感じている:

ggplot(df2, 
     #map columns to aesthetics: 
     aes(x = p, y = `p-active`, 
       #important to use a factor for discrete values: 
       fill = factor(product_id), 
       color = factor(product_id))) + 
    #summarize data: 
    stat_summary(fun.y = sum, 
       #the geom: 
       geom = "bar", 
       #positioning: 
       position = "dodge") 
関連する問題