0

以下に示すようなデータフレームがあります。

    group     respondent nteachers totalq3 totalq4 totalq5 totalq6 totalq7
1       2            You         2       5       4       4       5       5
2       2  Your Teachers         2      10       8       9      10      10
119  1001 All Principals        NA      NA      NA      NA      NA      NA
120  1002   All Teachers        NA      NA      NA      NA      NA      NA

(totalq53 を介して) totalq7 を超える追加のベクトルがありますが、このデータの断片で十分です。

私が必要としているのは、totalq3 から totalq53 までのベクトルを "Your Teachers" の値の降順で特定する方法です。次に、「Your Teachers」の値が最も高い 5 つのベクトルにフラグを立て、これらの 5 つを xtable に出力します。最後に、このプロセスを繰り返して、"Your Teachers" の最小値を持つ 5 つのベクトルを特定する必要があります。

ここでのトリックは何ですか?すべてのヒントをいただければ幸いです。

アニ

4

2 に答える 2

1
inc <- order(data[data$respondent == 'Your Teachers',-(1:3)])
dec <- order(data[data$respondent == 'Your Teachers',-(1:3)], decreasing = T)
xtable(data[,3+inc[1:5]])
xtable(data[,3+dec[1:5]])
于 2012-06-03T20:37:14.093 に答える
0

「dat」という名前のデータフレームでは、これは「dat」の 2 行目の順序で列名になります。

names(dat)[-(1:3)][order( dat[2, -(1:3)]) ]

したがって、上位 5 つの回答者の値は次のようになります。

 tail( names(dat)[-(1:3)][order( dat[2, -(1:3)]) ], 5)

そして、5 つの最低値を持つ列名:

head( names(dat)[-(1:3)][order( dat[2, -(1:3)]) ], 5)

xtable に渡すための削減されたデータセットを取得するには、「頭または尾」を使用します。

 dat[ , head( names(dat)[-(1:3)][order( dat[2, -(1:3)]) ], 5) ]

テストセットは次のとおりです。

dat <- read.table(text="    group     respondent nteachers totalq3 totalq4 totalq5 totalq6 totalq7
1       2            'You'         2       5       4       4       5       5
2       2  'Your Teachers'         2      10       8       9      10      10
119  1001 'All Principals'        NA      NA      NA      NA      NA      NA
120  1002   'All Teachers'        NA      NA      NA      NA      NA      NA", header=TRUE)
于 2012-06-03T23:11:53.017 に答える