如何按因变量分组?

Posted

技术标签:

【中文标题】如何按因变量分组?【英文标题】:How to group by dependent variable? 【发布时间】:2013-10-30 03:58:54 【问题描述】:

来自 sciplot 的条形图允许我们绘制带有误差线的条形图。它还允许按自变量(因子)分组。我想按因变量分组,我怎样才能做到这一点

bargraph.CI(x.factor, response, group=NULL, split=FALSE,
col=NULL, angle=NULL, density=NULL,
lc=TRUE, uc=TRUE, legend=FALSE, ncol=1,
leg.lab=NULL, x.leg=NULL, y.leg=NULL, cex.leg=1,
bty="n", bg="white", space=if(split) c(-1,1),
err.width=if(length(levels(as.factor(x.factor)))>10) 0 else .1,
err.col="black", err.lty=1,
fun = function(x) mean(x, na.rm=TRUE),
ci.fun= function(x) c(fun(x)-se(x), fun(x)+se(x)),
ylim=NULL, xpd=FALSE, data=NULL, subset=NULL, ...)

bargraph.CI 的规格如上所示。响应变量通常是数值向量。这一次,我真的想针对相同的自变量绘制三个响应变量(A、B、C)。让我用数据框“mpg”来说明问题。我可以用下面的代码成功地得到一个情节,这里的DV是hwy

data(mpg)
attach(mpg)

bargraph.CI(
class,  #categorical factor for the x-axis
hwy,    #numerical DV for the y-axis
group=NULL,   #grouping factor
legend=T, 
ylab="Highway MPG",
xlab="Class")

我也可以成功得到一个情节,唯一的变化是DV(从hwy改为cty)

data(mpg)
attach(mpg)

bargraph.CI(
class,  #categorical factor for the x-axis
cty,    #numerical DV for the y-axis
group=NULL,   #grouping factor
legend=T, 
ylab="Highway MPG",
xlab="Class")

但是,如果我想同时使用两个 DV,我的意思是,对于每个组,我想显示两个条,一个用于 cty,一个用于 hwy。

data(mpg)
attach(mpg)

bargraph.CI(
class,  #categorical factor for the x-axis
c(cty,hwy),    #numerical DV for the y-axis
group=NULL,   #grouping factor
legend=T, 
ylab="Highway MPG",
xlab="Class")

由于尺寸不匹配,它不会起作用。我怎样才能做到这一点?好吧,实际上可以通过使用Boxplot schmoxplot: How to plot means and standard errors conditioned by a factor in R? 中的方法和ggplot2 来实现类似的条形图效果。因此,如果您对如何使用 ggplot2 进行操作有任何想法,我也可以。

【问题讨论】:

【参考方案1】:

正如显示数据时经常发生的那样,您应该先操作数据,然后使用bargraph.CI。在您的示例中,您想要可视化的data.frame 如下:

df <- data.frame(class=c(mpg$class, mpg$class), 
                 value=c(mpg$cty, mpg$hwy), 
                 grp=rep(c("cty", "hwy"), each=nrow(mpg)))

然后您可以在这个新的data.frame 上使用bargraph.CI

bargraph.CI(
  class,        #categorical factor for the x-axis
  value,        #numerical DV for the y-axis
  group=grp,    #grouping factor
  data=df, 
  legend=T, 
  ylab="Highway MPG",
  xlab="Class")

【讨论】:

提醒所有相信只有 ggplot2 可以在 R 中画线的人:bargraph.CI 不是 ggplot2,而是使用标准图形。 @DieterMenne:很公平。我只是碰巧从ggplot 标签中看到了帖子,而我将与ggplot 一起使用的解决方案奏效了,所以我没有再想了。但显然bargraph.CI 不是ggplot

以上是关于如何按因变量分组?的主要内容,如果未能解决你的问题,请参考以下文章

如何获得按 numpy 和 pandas 中的变量分组的平均值? [复制]

按小时分组时如何概括分类数据?

Django按变量分组

根据另一个变量的中位数创建一个二元变量,按两个变量分组

获取数据框列表并按变量分组,并使用该变量作为字典的键

如何用spass给一组数据比如说年龄分组?