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

我有这张桌子:

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. 在Excel中?

谢谢。

我build议@ PaulHiemstra的答案,如果依靠额外的软件包不是您的工作stream程的问题。 否则,这可能是最简单的方法来做基地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)) 

我不认为你正在寻找每个职业的中等教育水平,而是模式,即频率最高的类别。 为了得到这个,你可以在plyr包中使用ddply

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

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

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

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

用CTRL + SHIFT + ENTER确认

这对你的例子有用,但对于一个真正的中位数,如果有4位医生,那么医生的中位值是在第二位和第三位之间的一半,因此可能在列表中没有任何值,那么你怎么知道哪个教育级别分配?