列的中位数,然后查找其他列值? (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 [...]
问题:
- 我如何在R中做到这一点?
- 在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位医生,那么医生的中位值是在第二位和第三位之间的一半,因此可能在列表中没有任何值,那么你怎么知道哪个教育级别分配?