2014-04-30 112 views
11

也許這很簡單,但我無法在網上找到答案。我的平均值是按等級計算的。 我的數據看起來typicaly:意思是因子水平

factor, value 
a,1 
a,2 
b,1 
b,1 
b,1 
c,1 

我想向量A中包含的意思是隻爲「A」級 如果我在康壽我想1.5 這種方法用於計算平均值A型,必須使用因素。

非常感謝您的幫助。

+6

嘗試'彙總(值〜因素, FUN = mean)' – Thomas

+2

或'A < - mean(data $ value [data $ factor ==「a」])' – lukeA

+0

@Bartek。如果您要完成遍歷數據框的工作以查找哪些元素是因子==「a」,那麼您可能需要在整個數據幀上執行操作,並在以後根據需要利用其他方法。 – JPC

回答

2

只是爲了好玩張貼data.table的解決方案,雖然你可能應該做的@lukeA建議

library(data.table) 
A <- setDT(df[df$factor == "a", ])[, mean(value)] 
## [1] 1.5 
16

看看tapply,它可以讓你根據因子(S)分手的載體和使用函數應用到每個子

> dat<-data.frame(factor=sample(c("a","b","c"), 10, T), value=rnorm(10)) 
> r1<-with(dat, tapply(value, factor, mean)) 
> r1 
     a   b   c 
0.3877001 -0.4079463 -1.0837449 
> r1[["a"]] 
[1] 0.3877001 

您可以訪問結果r1[["a"]]

或者,其中一種流行的R軟件包(plyr)有很好的方法來做到這一點。

> library(plyr) 
> r2<-ddply(dat, .(factor), summarize, mean=mean(value)) 
> r2 
    factor  mean 
1  a 0.3877001 
2  b -0.4079463 
3  c -1.0837449 
> subset(r2,factor=="a",select="mean") 
     mean 
1 0.3877001 

您還可以使用dlply代替(這需要一個數據幀,並返回一個列表,而不是)

> dlply(dat, .(factor), summarize, mean=mean(value))$a 
     mean 
1 0.3877001 
3

以下代碼要求當factor = a時的值的均值:

mean(data$value[data$factor == "a"]) 
0

另一種簡單的possibilty將是 「通過」 功能:

by(value, factor, mean) 

你可以得到因子水平 「A」 由平均:

factor_means <- by(value, factor, mean) 
factor_means[attr(factor_means, "dimnames")$factor=="a"]