在R中,是否有一种基于多个解释变量计算/绘制平均值的有效方法?

时间:2015-12-27 20:40:23

标签: r plot

以下是我的意思:

让我们使用R附带的void PlaySentence(String path){ try { AssetFileDescriptor afd = getAssets().openFd(path); player.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength()); player.prepare(); player.start(); } catch (Exception ex) { if (BuildConfig.DEBUG) Log.d(TAGName, ex.getMessage()); } } 数据集作为一个简单的例子。在这个数据集中有3列:长度,补充,剂量。剂量和补充剂都是长度的解释变量。例如,将剂量与长度作图并使用补充剂作为一个因素是很容易的。例如,使用qplot你就可以这样做:

ToothGrowth

接下来我要做的就是随着剂量的增加,看到每种补品的平均增长趋势。即,构建一个非常相似的图,除了我希望y变量是基于剂量和补充的值的平均值。

我不确定如何通过调用qplot来实现这一点。在我看来,或许要做的事情是计算新的列或其他东西,但我也不确定如何使用类似qplot(x = ToothGrowth$dose , y = ToothGrowth$len, color = ToothGrowth$supp) 的东西来构建基于多个解释变量的新列。 / p>

2 个答案:

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

答案 1 :(得分:2)

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

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

第一个参数是一个公式,它告诉函数它应该为lendose具有相同值的所有行聚合列supp的值。第二个参数给出了用于聚合的函数,即mean。所以,实际做的是以下几点:

  • 数据框的行按dosesupp分组。因此,组中的所有行都具有dosesupp的相同值。

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

这正是dplyr解决方案中正在发生的事情,但在那里,这两个步骤更明确地阐明了。

然后可以绘制结果数据框:

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

enter image description here