1

私はこのテーブルを持っています:

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で?

ありがとう。

4

3 に答える 3

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))
于 2012-09-26T16:10:18.750 に答える
1

職業ごとの教育レベルの中央値を探しているとは思いませんが、モード、つまり最も頻度の高いカテゴリを探しています。これを取得するにddplyは、plyrパッケージから使用できます。

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

ここdfで、はデータを含むdata.frameです。

于 2012-09-26T15:11:53.420 に答える
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番目の中間であるため、リストに値がない可能性があります。割り当てるレベル?

于 2012-09-26T15:39:44.327 に答える