2014-05-15 74 views
1

我有三個數據幀,我無法真正rbindcbind。他們分享存儲人口名稱的專欄'Pop.Name'。人口名稱在三個dfs中很常見。使用ggplot2從多個數據幀中避開條形圖

我試圖用ggplot2來統計(stat="bin")每個數據框中每個人口的病例數,並繪製它,以便我爲每個df和每個人口都有一個不同的欄。基本上我想比較一下每個人羣的計數數據,因爲在一個df和我正在使用治療的dfs。

要繪製單獨DF的一個我用:

plt<- ggplot(df1, aes(x=Pop.Name)) + theme_bw() # plot by pop 
plt<- plt + geom_bar() 

如何我另外兩個DFS添加到相同的情節?我相信這很簡單,我錯過了一些東西,但無法弄清楚什麼。我嘗試過:

plot1 <- ggplot(df1, aes(x=Pop.Name)) + 
    geom_bar() + 
    geom_bar(data = df2) 

還有很多其他的,但我要麼出錯或每個彈出只有一個酒吧。如果這是重複的,我非常抱歉,但我認爲它不是。然而,我的問題與此非常相似:ggplot stacked bar plot from 2 separate data frames,但我不能rbindcbind數據框(至少不是直接的方式,每個都是巨大的)。

感謝

一些玩具數據:

df1<-structure(list(Pop.Name = c(1, 2, 3, 4, 3, 2, 1, 2, 3, 4), Loc = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 3L, 3L, 3L, 3L), .Label = c("a", "c", "d"), class = "factor"), BP = c(10, 10, 10, 10, 50, 21, 33, 8, 8, 8)), .Names = c("Pop.Name", "Loc", "BP"), row.names = c(NA, -10L), class = "data.frame") 

df2<-structure(list(Pop.Name = c(3, 2, 3, 4, 3, 2, 1), A = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 3L), .Label = c("x", "y", "z"), class = "factor"), C = c(11, 11, 11, 10, 50, 21, 3)), .Names = c("Pop.Name", "A", "C"), row.names = c(NA, -7L), class = "data.frame") 

回答

0

這裏有一個選項:

df.list <- list(a=df1, b=df2) 
dat <- stack(lapply(df.list, `[[`, "Pop.Name")) 
ggplot(dat, aes(x=values, fill=ind)) + geom_bar(position="dodge") 

首先,我們把我們的數據幀在列表中,那麼我們只提取Pop.Name[[lapply,最後我們stack他們回到一個只包含源數據幀的數據幀中l和Pop.Name。這將產生:

enter image description here

注意Pop.Names不能因素,爲此工作。數據:

df1 <- data.frame(Pop.Name=sample(letters, 50, rep=T), stringsAsFactors=F) 
df2 <- data.frame(Pop.Name=sample(letters, 50, rep=T), stringsAsFactors=F) 

編輯:沒有注意到你發佈的數據,但這與你的數據原樣。

+0

感謝*因素*的澄清,我需要對實際數據進行更正。 –