识别df中特定行的5个最高值和5个最低值的向量

时间:2012-06-03 20:22:40

标签: r

我有一个数据框,如下所示:

    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

还有其他向量超出totalq7(通过totalq53),但这段数据应该足够了。

我需要的是以“你的老师”的值的降序来识别向量totalq3到totalq53的某种方法。然后我标记5个具有“Your Teachers”最高值的向量,并将这5个输出到xtable。最后,必须重复该过程以识别具有“您的教师”的最小值的5个向量。

这里的诀窍是什么?任何和所有提示将不胜感激。

阿尼

2 个答案:

答案 0 :(得分: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]])

答案 1 :(得分:0)

使用名为'dat'的数据框,这将是第二行'dat'顺序的列名。

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

因此,最高的五个受访者值将是:

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

列名称包含五个最低值:

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

要获得通过xtable的简化数据集,只需使用“head or tails”:

 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)