2015-12-27 28 views
0

以下是我所追求的内容:在R中,是否有一种基于多个解释变量计算/绘制平均值的有效方法?

让我们使用R附带的ToothGrowth数据集作为一个简单示例。在这个数据集中有3列:长度,补充剂量,剂量。剂量和补充剂都是长度的解释性变量。比方说,根据长度计算剂量并将补充剂作为一个因素很容易。例如,使用qplot你只是这样做:

qplot(x = ToothGrowth$dose , y = ToothGrowth$len, color = ToothGrowth$supp) 

接下来的事情我想要做的就是看平均增长为每个补充的趋势剂量的增加。也就是说,构建一个非常相似的图,除了我想要y变量是基于剂量和补充值的平均值。

我不知道如何做到这一点与调用qplot。我想到可能要做的事情是计算一个新列或什么,但我也不知道如何使用像mutate这样的东西来建立一个基于多个解释变量的新列。

回答

2

我认为这可能是你正在寻找,但你可能需要澄清。下面是如何使用dplyr

Avg_ToothGrowth <- ToothGrowth %>% 
    group_by(supp, dose) %>% 
    summarise(avg_len = mean(len)) %>% 
    ungroup 

qplot(dose, avg_len, data = Avg_ToothGrowth, color = supp) 

这应该让你接近产生平均值,但你可能要经过一个dplyr教程以更好地了解使用group_bysummarise。我使用ungroup来剥离剩余的分组,因为它们不需要(可能有更好的方法来做到这一点)。

编辑:

您还可以使用趋势线为每个组

# With confidence interval 
qplot(dose, len, data = ToothGrowth, color = supp, geom = c('smooth', 'point'), method = 'lm') 
# Without confidence interval 
qplot(dose, len, data = ToothGrowth, color = supp, geom = c('smooth', 'point'), method = 'lm', se=FALSE) 
+0

'tbl_df'。 – Stibu

+0

@Stibu谢谢你指出,我打算删除它,但... – steveb

+1

为了清楚起见,我删除了“tbl_df”。 – steveb

2

我个人更喜欢使用dplyr作为steveb没有绘制的原始数据,但如果你不熟悉使用该软件包,没有它的解决方案可能会更容易理解。该功能aggregate()可以帮助您:

tg <- aggregate(len ~ dose + supp, mean, data = ToothGrowth) 

第一个参数是一个公式,告诉它​​应该聚集列len的值具有相同的值dosesupp所有行的功能。第二个参数给出用于聚合的函数,即mean。那么,什么是真正做的是以下几点:数据帧的

  • 行由dosesupp组合在一起。因此,组内的所有行因此具有相同的dosesupp的值。

  • 然后,对于每个组,函数mean()被应用于列len

这正是dplyr解决方案中发生的情况,但是在那里,这两个步骤更加清晰。然后

所得数据帧可以被绘制:实际上不需要

qplot(dose, len, colour = supp, data = tg) 

enter image description here

+0

这是一个很好的答案。我挖dplyr,但我仍然习惯它。我在解开dplyr解释时遇到了麻烦,但是这个既有助于澄清这个答案,也为我提供了一种理解这个过程的方法,而没有任何特殊的包装魔法。谢谢! – Zelbinian

相关问题