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))