ggplot:将多个答案编码为虚拟变量

时间:2014-01-22 23:44:22

标签: r ggplot2

R和ggplot新手在这里。 我正在尝试为表示问卷答案的数据框创建一些有意义的图表,其中有些人给出了这种类型的多个答案:

你喜欢什么肉(检查所有适用的): 1.fish; 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)

但我想对猪肉和鱼类变量采用相同的方法,但我不知道从哪里开始。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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的答案以获取如何执行此操作的说明。