2017-09-27 9 views

答えて

1

希望します。

library(reshape) 
library(ggplot2) 

#sample data  
demo <- read.table(header = TRUE, 
        text ="var1 var2 
        Good Excellent 
        Subpar Good 
        Excellent Decent 
        Good Good 
        Subpar Subpar") 

#pre-processing 
df <- merge(melt(table(demo$var1)), melt(table(demo$var2)), by='Var.1', all=T) 
colnames(df) <- c("Words", "Var1", "Var2") 
df[is.na(df)] <- 0 
df <- melt(df, id=c("Words")) 
colnames(df) <- c("Words", "Column_Name", "Count") 

#plot 
ggplot(df, aes(x=Words, y=Count, fill=Column_Name)) + 
    geom_bar(position="dodge", stat="identity") 

Final Plot

+0

@ AppleGate0あなたの問題を解決した場合、[回答を受け入れる](https://stackoverflow.com/help/someone-answers)を忘れないでください:) – Prem

0

tidyverseはそのために最適です:

library(tidyverse) 
demo %>% 
    gather(key, value) %>% 
    mutate(value_ordered = factor(value, levels=c("Decent","Good", "Subpar", "Excellent"))) %>% 
    ggplot(aes(value_ordered, fill=key)) + 
      geom_bar(position="dodge") 

enter image description here

、または同じ幅の棒:

as.tbl(demo) %>% 
    gather(key, value) %>% 
    group_by(key, value) %>% # group 
    count() %>% # count the frequency 
    ungroup() %>% # ungroup 
    complete(key, value) %>% # Complete missing combinations 
    mutate(value_ordered = factor(value, levels=c("Decent","Good", "Subpar", "Excellent"))) %>% 
    ggplot(aes(value_ordered,n, fill=key)) + 
    geom_col(position = "dodge") # it is recommended to use geom_col directly instead of stat="identity" 
関連する問題