2014-01-22 37 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的答案以获取如何执行此操作的说明。