我想在数据框中找到值的平均值。例如,如果我有以下数据:
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
的错误。谁能帮我吗?谢谢!
答案 0 :(得分: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"])
答案 1 :(得分:3)
请记住,()
用于函数调用,[]
用于子集化。你现在正在调用一个函数,而实际上没有函数,给出你看到的错误信息。
从更广泛的意义上讲,对于我喜欢使用plyr
的这类事情,尽管data.table
是一个非常棒的选择。
library(plyr)
ddply(dataframe, .(Status), summarize, mean_value = mean(Value))
这将为您生成一个新的data.frame
,其Value
的每个唯一值的平均值为Status
。
答案 2 :(得分: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)]