使用列的值过滤器计算平均值

时间:2014-03-05 13:19:12

标签: r

我创建了这个小数据框:

employee <- c('Yossi ','Pitt ','Deepak','Golan')
salary <- c(21000, 23400, 26800,91000)
testd <- data.frame(employee,salary)

当我写:

mean(testd$salary) 

我得到了正确答案:40550

但是当我试图计算大于25000的工资的平均值时,我得到了这个结果。

mean(testd$salary>=25000)
# [1] 0.5

而不是由此计算构成的58900:(26800 + 91000)/ 2

我做错了什么?

4 个答案:

答案 0 :(得分:9)

尝试:

mean(testd$salary[testd$salary>=25000])

实际上,testd$salary>=25000boolean值的向量,当您调用{{1}时,它们会自动映射到numeric类型(True = 1False = 0) }}

答案 1 :(得分:3)

即使你是初学者(就像我一样),我也建议你开始学习data.table,因为与使用常规的data.frame相比,它会使你的计算速度更快。在这种情况下你可以做(​​看起来也更干净):

testd<-data.table(testd)
testd[salary>25000,mean(salary)]

答案 2 :(得分:3)

另一种方法是使用aggregate获取门槛两侧的答案:

aggregate(salary~salary>=25000,testd,mean)
  salary >= 25000 salary
1           FALSE  22200
2            TRUE  58900

答案 3 :(得分:2)

使用dplyr,您可以使用以下代码获得正确答案:

library(dplyr)
testd %.%
  select(employee, salary) %.%
  filter(salary > 25000) %.%
  summarise(mean = mean(salary))