2016-11-18 120 views
1

我是新來的,所以請原諒這樣一個基本的問題,但我剛開始R和我一直在問剩下的我難住了一個問題:如何找到另一個變量的每個值的變量的平均值?

R中使用預裝的數據集,mtcars,我m應該爲「齒輪」變量的每個值找到「mpg」變量的平均值。我不確定這意味着什麼。我假設我需要使用子集?

它是如此基本,所以我有點沮喪,我沒有看到在這裏做什麼....

+1

你可以試試看這裏的教程:http://www.r-tutor.com/r-introduction/data-frame'mtcars'是一個包含行和列的對象。我沒有看到整個數據集,但是'mpg'是該數據集的一列,我猜想'gear'也是數據集上的一列。 – scrappedcola

回答

4

使用aggregate

aggregate(mtcars$mpg,list(mtcars$gear),mean) 
## Group.1  x 
##1  3 16.10667 
##2  4 24.53333 
##3  5 21.38000 

根據文檔,請參閱?aggregate

將數據拆分爲子集,計算每個子集的彙總統計信息,並以便捷的形式返回結果。

這裏,第一個參數mtcars$mpg是要平均的變量,第二個參數是分組變量的列表,通過它的每一個價值判斷的x子集應用功能,mean,即第三個參數。

+0

很好的答案,但它可能是一個更清潔的公式接口'聚合(MPG〜齒輪,mtcars,意思)''。 – Barker

+0

在這裏編碼類的令人沮喪的事情之一是,他們教我們非常基礎,並向我們提出有關我們尚未完成的代碼的問題。感謝您向我介紹聚合函數!大幫忙! – ROCKaholic

2

使用dplyr

library(dplyr) 
mtcars %>% 
    group_by(gear) %>% 
    summarise(avg_mpg = mean(mpg)) 
+0

非常感謝:) – ROCKaholic

1

有時是有用的通過可視化的數據開始:

plot(x = mtcars$gear, y = mtcars$mpg) 

enter image description here

我們可以看到,gear需要3個值(3,4和5),我們希望找到的平均齒輪每個值的值爲mpg

我們可以通過子集做到這一點,你的建議:

mean(subset(mtcars, gear == 3)$mpg) 
# [1] 16.10667 

但一個辦法做到這一點使用base R裏面的函數是tapply

tapply(mtcars$mpg, mtcars$gear, mean) 
#  3  4  5 
# 16.10667 24.53333 21.38000 
1

或者使用data.table

library(data.table) 
as.data.table(mtcars)[, .(avg_mpg = mean(mpg)), by = gear] 
相關問題