2017-02-15 41 views
0

我需要將多個網站的提高認識度量結合到一個單獨的barplot中。每個網站的意識由一個單獨的名義變量(是/否)來衡量。我想創建一個每個網站一個酒吧的情節,指出有多少人知道各自的網站。我的第一次嘗試是創建一個矢量,每個網站的「是」值除以「總行數」。但有69個網站應該有一個更智能的方式。繪製多個名義變量

堆棧溢出類型的以下解決方案適合我想要做的。 How do I plot a number of categorical variables on a graph in R?

但如果可能,我想只顯示yes值。此外,我希望在一個圖中的所有內容而不是多個圖。

我的數據幀結構如下:

gender <- factor(sample(1:2, 5, replace=TRUE), levels = c(1,2,99), labels = c("Male", "Female", "Missing Value")) 
age <- sample(18:55, 5, replace=TRUE) 
web1 <- factor(sample(1:2, 5, replace=TRUE), levels = c(1,2,99), labels = c("Yes", "No", "Missing Value")) 
web2 <- factor(sample(1:2, 5, replace=TRUE), levels = c(1,2,99), labels = c("Yes", "No", "Missing Value")) 
web3 <- factor(sample(1:2, 5, replace=TRUE), levels = c(1,2,99), labels = c("Yes", "No", "Missing Value")) 
web4 <- factor(sample(1:2, 5, replace=TRUE), levels = c(1,2,99), labels = c("Yes", "No", "Missing Value")) 
web5 <- factor(sample(1:2, 5, replace=TRUE), levels = c(1,2,99), labels = c("Yes", "No", "Missing Value")) 
df <- data.frame(gender, age, web1, web2, web3, web4, web5) 
df 
+0

在您的示例數據框中,您可能希望將'cbind'替換爲'data.frame'。用'cbind'你實際上正在創建一個矩陣,並且所有的東西都被轉換爲數字。這樣我們就失去了因素標籤。 – zelite

+0

完成。謝謝! – Finn

回答

1

我們可以使用tidyverse創造你想要的信息的TBL,然後繪製圖形。

library(tidyverse) 

df2 <- gather(df, "website", "aware", 3:7, factor_key = T) %>% 
    group_by(website, aware) %>% 
    summarize(n = n()) %>% 
    ungroup() %>% 
    filter(aware == "Yes") %>% 
    complete(website, fill = list(n = 0)) 

ggplot(data = df2) + 
    geom_bar(aes(website, n), stat = "identity") 
+0

完美的作品,非常感謝! – Finn