在一列的值上使用筛选器计算平均值

4

我创建了这个小数据框:

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个回答

14

尝试:

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

实际上,testd$salary>=25000是一个由boolean值组成的向量,当你调用mean函数时,这些值会自动映射为numeric类型(True = 1False = 0)。


6
使用dplyr,您可以使用以下代码得到正确的答案:
library(dplyr)
testd %.%
  select(employee, salary) %.%
  filter(salary > 25000) %.%
  summarise(mean = mean(salary))

3
即使你是初学者(就像我一样),我推荐开始学习data.table,因为与使用普通的data.frame相比,它将使您的计算速度更快。在这种情况下,您可以执行以下操作(看起来更加简洁):
testd<-data.table(testd)
testd[salary>25000,mean(salary)]

3
另一种方法是使用aggregate来获取您阈值两侧的答案:
aggregate(salary~salary>=25000,testd,mean)
  salary >= 25000 salary
1           FALSE  22200
2            TRUE  58900

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接