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

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

我需要的是某种方式来识别向量totalq3 到totalq53,按照“你的老师”的值的降序排列。然后我标记“你的老师”的 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”第二行的顺序排列的列名。

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 的简化数据集,只需使用“heads 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)
于 2012-06-03T23:11:53.017 回答