列的中位数然后查找其他列值? (R)

时间:2012-09-26 14:34:11

标签: r excel plyr mean

我有这张桌子:

Profession Educational_level Number
Doctor     Low               0
Doctor     Medium            5
Doctor     High              8
Nurse      Low               1
Nurse      Medium            8
Nurse      High              3
[...]

我想找出中间人的教育程度,最后得出这张表:

Doctor     High
Nurse      Medium
[...]

问题:

  1. 我如何在R?
  2. 中执行此操作
  3. 在Excel中?
  4. 感谢。

3 个答案:

答案 0 :(得分:2)

如果依赖额外的软件包对您的工作流程来说不是问题,我建议@ PaulHiemstra的答案。否则,这可能是在基础R中最简单的方法:

df <- read.csv(text="Profession Educational_level Number
Doctor     Low               0
Doctor     Medium            5
Doctor     High              8
Nurse      Low               1
Nurse      Medium            8
Nurse      High              3", header=TRUE)

results <- by(df, INDICES=dat$Profession, 
   FUN=function(subset) with(subset, Educational_level[which.max(Number)]))
data.frame(names(results), unclass(results))

答案 1 :(得分:1)

我认为您不是在寻找每个职业的中位数教育水平,而是模式,即频率最高的类别。为此,您可以使用plyr包中的ddply

require(plyr)
ddply(df, .(Profession), summarise, 
          mode_educ = Educational_level[which.max(Number)]

其中df是包含数据的data.frame。

答案 2 :(得分:1)

在Excel中,你可以像这样使用“数组公式”

=INDEX(B2:B10,MATCH(1,(A2:A10="Doctor")*(C2:C10=MEDIAN(IF(A2:A10="Doctor",C2:C10))),0))

使用CTRL + SHIFT + ENTER确认

这适用于您的示例但是对于真正的中位数,例如,如果有4位医生,则医生的中位数值介于第2和第3之间,因此列表中可能没有任何值,那么您将如何知道要分配哪个教育水平?