2013-11-29 35 views
5

我想查找值的数据框中的平均值。例如,如果我有以下数据:数据框中列的值的平均值?

ID Value Status 
1 10  A 
2 15  B 
3 20  A 

而我想找到状态为A的所有值的均值。我会怎么做?

这里是我的尝试:

dataframe$balance.mean(dataframe$status == 'A') 

但我不断收到写着Error: attempt to apply non-function错误。谁能帮我吗?谢谢!

回答

12

如果我了解清楚你的要求,下面应该满足您的要求:

id<-c(1,2,3) 
val<-c(10,15,20) 
sta<-c("A","B","A") 

df<-data.frame(id,val,sta) 

mean(df$val[df$sta=="A"]) 
+2

+1,使用'with'使得它在论文的情况下,更清晰,没有太多'$'S:'用(DF,平均(VAL [STA == “A”))' – Arun

+1

甚至更具可读性(可争论的)可以是:with(subset(df,sta ==“A”),mean(val))' – flodel

3

请记住,()用于函数调用,[]用于子集。你现在正在调用一个函数,而实际上没有函数,给出你看到的错误信息。

从更一般的意义上说,对于我喜欢使用的这些东西plyr,尽管data.table是一个很棒的其他选项。

library(plyr) 
ddply(dataframe, .(Status), summarize, mean_value = mean(Value)) 

这将产生你新data.frameValueStatus每个唯一值的平均值。

3

至于@PaulHiemstra提到,有一个干净的data.table解决方案将是:

library(data.table) 
DT[Status=="A", mean(val)] 

其中DT <- as.data.table(your_data_frame)


或者您可以将键设置为更快的结果:

setkey(DT, "status") 
# this will produce a data.table, not a single 
DT["A", mean(val)] 
# This produces a single number 
DT["A"] [, mean(val)]