2014-01-22 39 views
0

R和ggplot新手在這裏。 我試圖創造代表回答了問卷,其中一些人給的那種多個答案的數據幀一些有意義的情節:ggplot:繪製多個答案編碼爲虛擬變量

什麼肉做自己喜歡的(可以多選): 1。魚; 2.pork

對於其他問題,只有一個選擇:

你喝啤酒嗎?很少/經常/從未

由於有多個答案,它們被編碼爲虛擬變量:eat.fish的值爲1表示正面答案,否則爲0,eat.pork的值相同。數據幀是這樣的:

pork<-c(0,1,0,1,1) 
id<-c(1:5) 
sex<-c("m","m","f","f","f") 
eat.fish<-c(1,1,0,0,1) 
eat.pork<-c(0,1,0,1,1) 
drink.beer<-c("often","seldom","never","seldom","never") 
df<-data.frame(id,sex,eat.fish,eat.pork,drink.beer) 

現在,對於像drink.beer分類變量,我知道如何獲得一些有意義的情節與GGPLOT2:

qplot(data=df, drink.beer, fill=drink.beer) 

qplot(data=df, drink.beer, fill=drink.beer)+facet_wrap(~sex) 

但我想對豬肉和魚的變量也一樣,但我不知道從哪裏開始。

回答

1

你可以重新編碼的變量

df$eat.pork2 <- ifelse(df$eat.pork == 1, "eat_pork", "dont_eat_pork") 
qplot(data=df, eat.pork2, fill=eat.pork2) 

或者,如果你想豬肉和魚結合成一個單一變量

df$eat <- ifelse(df$eat.pork == 1 & df$eat.fish == 1, "eat_pork_fish", 
      ifelse(df$eat.pork == 1 & df$eat.fish == 0, "eat_pork_only", 
      ifelse(df$eat.pork == 0 & df$eat.fish == 1, "eat_fish_only",       
      "neither_pork_fish"))) 

qplot(data=df, eat, fill=eat)+facet_wrap(~sex) 
qplot(data=df, eat, fill=eat) 
+0

謝謝,但這實際上並沒有幫助我,因爲它爲每個變量引入了「dont_eat」值。這就好像啤酒類我不會有累積的「經常」,「很少」,「從不」的條形圖,但有3種不同的,「經常」與「dont_drink」,「很少」與「dont_drink」和「從不」 「vs」dont_drink「。所以我需要它來擺脫0值(或「dont_eat」)。 – Florin

+0

那麼你是否試圖將豬肉和魚類折成單一變量?你可以用一系列ifelse語句來做到這一點。 –

+0

輝煌!非常感謝! – Florin

0

現在你eat.porkeat.fish變量的數值。你可以將它們轉換爲因素的qplot函數內部變量是這樣的:

qplot(data=df, as.factor(eat.pork), fill=as.factor(eat.pork)) + facet_wrap(~sex) 

可以爲eat.fish變量這樣做。當你想將eat.porkeat.fish變量合併爲一個變量時,請參閱matt_k的答案以獲取如何執行此操作的說明。