2017-08-14 10 views
0

lvl beginnerとlvl proの2つのグループに分類される10000人のユーザーがいるとします。ggplot2:2つのグループをメンバーの一部で比較する

すべてのユーザーは、1から20

にDFを行く、ランクがあります。

# beginers 
n <- 7000 
user.id <- 1:n 
lvl <- "beginer" 
rank <- sample(1:20, n, replace = TRUE, 
       prob = seq(.9,0.1,length.out = 20)) 
df.beginer <- data.frame(user.id, rank, lvl) 

# pros 
n <- 3000 
user.id <- 1:n 
lvl <- "pro" 
rank <- sample(1:20, n, replace = TRUE, 
       prob = seq(.9,0.3,length.out = 20)) 
df.pro <- data.frame(user.id, rank, lvl) 

library(dplyr) 
df <- bind_rows(df.beginer, df.pro) 
df2 <- tbl_df(df) %>% group_by(lvl, rank) %>% mutate(count = n()) 

問題1: 私は側で各基側を比較した棒グラフが必要ですが、与える代わり場合私は、各グループからのバーは同じ最大絶頂(100%)

私がこれまでに得たプロットを持っていますので、私は、パーセントを必要とし、カウント:

library(ggplot2) 
plot <- ggplot(df2, aes(rank)) 
plot + geom_bar(aes(fill=lvl), position="dodge") 

barplot

問題2:

私は各グループを比較したラインプロットを必要とするので、私たちは2行を持つことになりますが、代わりに私がカウントを与える場合、私はパーセントを必要とするので、各グループからの行があります同じ最大絶頂(100%)

私がこれまでに得たプロット:

plot + geom_line(aes(y=count, color=lvl)) 

lines

問題3:

がランクは累積的であると言うことができますので、ランク3を持っているユーザは、ランク1及び2を有するランク20を持つユーザーは、1から20

に全てのランクを有します

プロットするときに、100%のユーザーがいるランク1からプロットを開始したい場合は、 ランク2はランク2よりもランク3が低くなります。

私はこれをすべてtableauで行いましたが、実際にはそれを嫌い、Rがこれらのすべてを処理できることを自分に示したいと思います。

ありがとうございました!

答えて

3

三つの問題、3つの解決策:

問題1 - 割合を計算し、使用geom_col

df %>% 
    group_by(rank, lvl)%>% 
    summarise(count = n()) %>% 
    group_by(lvl) %>% 
    mutate(count_perc = count/sum(count)) %>% # calculate percentage 
    ggplot(., aes(x = rank, y = count_perc))+ 
    geom_col(aes(fill = lvl), position = 'dodge') 

enter image description here

問題2 - ほとんど同じ問題1として使用geom_line除く代わりのgeom_col

df %>% 
    group_by(rank, lvl)%>% 
    summarise(count = n()) %>% 
    group_by(lvl) %>% 
    mutate(count_perc = count/sum(count)) %>% 
    ggplot(., aes(x = rank, y = count_perc))+ 
    geom_line(aes(colour = lvl)) 

enter image description here

問題3 - 私は驚いてarrangecumsum

df %>% 
    group_by(lvl, rank) %>% 
    summarise(count = n()) %>% # count by level and rank 
    group_by(lvl) %>% 
    arrange(desc(rank)) %>% # sort descending 
    mutate(cumulative_count = cumsum(count)) %>% # use cumsum 
    mutate(cumulative_count_perc = cumulative_count/max(cumulative_count)) %>% 
    ggplot(., aes(x = rank, y = cumulative_count_perc))+ 
    geom_line(aes(colour = lvl)) 

enter image description here

+0

を利用します!ありがとうございました!!! – erickfis

関連する問題