私はこのテーブルを持っています:
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で?
ありがとう。
回答:
回答№1は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))
回答№2の場合は1
職業ごとの教育レベルの中央値を探しているとは思わないが、モード、つまり頻度が最も高いカテゴリを探していると思う。これを得るには、 ddply
plyrパッケージから:
require(plyr)
ddply(df, .(Profession), summarise,
mode_educ = Educational_level[which.max(Number)]
どこで df
データを含むdata.frameです。
回答№3の場合は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番目の中間です。したがって、リストに値がない可能性があります。どの教育レベルを割り当てるかをどのように知るのでしょうか。