我创建了这个小数据框:
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
我做错了什么?
尝试:
mean(testd$salary[testd$salary>=25000])
实际上testd$salary>=25000
是boolean
值的向量,当你调用mean
时,这些值会自动映射到numeric
类型(True = 1
,False = 0
)。
使用dplyr
,您可以使用以下代码获得正确的答案:
library(dplyr)
testd %.%
select(employee, salary) %.%
filter(salary > 25000) %.%
summarise(mean = mean(salary))
即使你是初学者(像我一样),我建议开始学习data.table,因为与使用常规data.frame相比,这将使你的计算速度更快。 在这种情况下,您可以这样做(看起来也更干净):
testd<-data.table(testd)
testd[salary>25000,mean(salary)]
另一种方法是使用aggregate
获得阈值两侧的答案:
aggregate(salary~salary>=25000,testd,mean)
salary >= 25000 salary
1 FALSE 22200
2 TRUE 58900