使用apply时消失的行名称

时间:2010-11-06 20:23:58

标签: sorting r apply

考虑下面的例子(向量中的值是目标练习结果,我试图通过射击得分自动排序)。我们生成三个向量。我们按列1:20按升序排序值,按行按降序排列out.tot列。

# Generate data
shooter1 <- round(runif(n = 20, min = 1, max = 10))
shooter2 <- round(runif(n = 20, min = 1, max = 10))
shooter3 <- round(runif(n = 20, min = 1, max = 10))
out <- data.frame(t(data.frame(shooter1, shooter2, shooter3)))
colnames(out) <- 1:ncol(out)

out.sort <- t(apply(out, 1, sort, na.last = FALSE))
out.tot <- apply(out , 1, sum)
colnames(out.sort) <- 1:ncol(out.sort)
out2 <- cbind(out.sort, out.tot)

out3 <- apply(out2, 2, sort, decreasing = TRUE, na.last = FALSE)

out2out3丢失时附加了行名称。唯一的区别是我使用MARGIN = 2,这可能是罪魁祸首(因为它逐列采用)。我可以手动匹配行,但是有一种方法可以让out3中的行名不再消失吗?

> out2
         1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 out.tot
shooter1 1 2 2 3 3 3 4 5 5  5  6  6  6  6  6  7  8  9  9 10     106
shooter2 1 3 3 3 3 4 4 4 5  5  5  5  5  6  7  8  8  9  9 10     107
shooter3 1 1 2 2 2 3 3 4 5  5  5  6  6  6  6  7  8  8  8  9      97

> out3
     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 out.tot
[1,] 1 3 3 3 3 4 4 5 5  5  6  6  6  6  7  8  8  9  9 10     107
[2,] 1 2 2 3 3 3 4 4 5  5  5  6  6  6  6  7  8  9  9 10     106
[3,] 1 1 2 2 2 3 3 4 5  5  5  5  5  6  6  7  8  8  8  9      97

1 个答案:

答案 0 :(得分:0)

如果我理解你的例子,从out2out3,你就会独立地对每一列进行排序 - 这意味着第1行的值可能并非都来自于shooter1生成的数据。有意义的是,rownames被丢弃,因为rownames是观察的名称,你不再保留一行观察数据。