2015-12-27 54 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

相關問題