R 使用列上的过滤器计算平均值';s值

R 使用列上的过滤器计算平均值';s值,r,R,我创建了这个小数据框: employee <- c('Yossi ','Pitt ','Deepak','Golan') salary <- c(21000, 23400, 26800,91000) testd <- data.frame(employee,salary) 我得到了正确的答案:40550 但当我试图计算超过25000的平均工资时,我得到了这个结果 mean(testd$salary>=25000) # [1] 0.5 而不是由该计算得出的58900:(

我创建了这个小数据框:

employee <- c('Yossi ','Pitt ','Deepak','Golan')
salary <- c(21000, 23400, 26800,91000)
testd <- data.frame(employee,salary)
我得到了正确的答案:40550

但当我试图计算超过25000的平均工资时,我得到了这个结果

mean(testd$salary>=25000)
# [1] 0.5
而不是由该计算得出的58900:(26800+91000)/2

我做错了什么?

试试:

mean(testd$salary[testd$salary>=25000])
实际上,
testd$salary>=25000
是一个
布尔值的向量,当你调用
mean
时,它会自动映射到
数值类型(
True=1
False=0
),即使你是初学者(像我一样),我建议您开始学习data.table,因为与使用常规data.frame相比,它将使您的计算速度更快。在这种情况下,您可以这样做(看起来也更干净):

testd25000,平均工资]

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

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

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

library(dplyr)
testd %.%
  select(employee, salary) %.%
  filter(salary > 25000) %.%
  summarise(mean = mean(salary))
aggregate(salary~salary>=25000,testd,mean)
  salary >= 25000 salary
1           FALSE  22200
2            TRUE  58900
library(dplyr)
testd %.%
  select(employee, salary) %.%
  filter(salary > 25000) %.%
  summarise(mean = mean(salary))