下面是我的data.frame
,我想知道每个内存类别(1到8)的模式是什么
> dput(d)
structure(list(MEMORY1 = c(5.5, 7, 1.5, 6, 4.5, 4.5, 5, 4, 1,
5.5, 2.5, 4.5, 2.5, 5.5, 4, 1, 4, 5, 2.5, 5.5), MEMORY2 = c(5.5,
3, 1.5, 6, 4.5, 4.5, 5, 4, 5, 5.5, 6.5, 4.5, 2.5, 5.5, 4, 7,
8, 5, 6.5, 5.5), MEMORY3 = c(5.5, 3, 4.5, 2, 4.5, 4.5, 5, 4,
5, 1.5, 6.5, 4.5, 6.5, 5.5, 4, 7, 4, 5, 6.5, 5.5), MEMORY4 = c(1.5,
3, 4.5, 2, 1, 4.5, 5, 4, 5, 5.5, 2.5, 4.5, 2.5, 1.5, 4, 2, 4,
5, 2.5, 1.5), MEMORY5 = c(5.5, 3, 4.5, 6, 4.5, 4.5, 5, 1, 5,
5.5, 6.5, 4.5, 6.5, 5.5, 4, 4, 4, 5, 2.5, 1.5), MEMORY6 = c(5.5,
7, 7.5, 6, 8, 4.5, 5, 7.5, 5, 5.5, 6.5, 4.5, 6.5, 5.5, 4, 4,
4, 5, 2.5, 5.5), MEMORY7 = c(1.5, 3, 4.5, 2, 4.5, 4.5, 1, 4,
5, 1.5, 2.5, 4.5, 6.5, 1.5, 4, 7, 4, 1, 6.5, 5.5), MEMORY8 = c(5.5,
7, 7.5, 6, 4.5, 4.5, 5, 7.5, 5, 5.5, 2.5, 4.5, 2.5, 5.5, 8, 4,
4, 5, 6.5, 5.5)), .Names = c("MEMORY1", "MEMORY2", "MEMORY3",
"MEMORY4", "MEMORY5", "MEMORY6", "MEMORY7", "MEMORY8"), row.names = c(492L,
509L, 510L, 518L, 519L, 522L, 527L, 533L, 535L, 542L, 543L, 557L,
558L, 560L, 567L, 569L, 578L, 581L, 582L, 584L), class = "data.frame")
请忽略第一个未命名的列,因为这与此无关。
> d
MEMORY1 MEMORY2 MEMORY3 MEMORY4 MEMORY5 MEMORY6 MEMORY7 MEMORY8
492 5.5 5.5 5.5 1.5 5.5 5.5 1.5 5.5
509 7.0 3.0 3.0 3.0 3.0 7.0 3.0 7.0
510 1.5 1.5 4.5 4.5 4.5 7.5 4.5 7.5
518 6.0 6.0 2.0 2.0 6.0 6.0 2.0 6.0
519 4.5 4.5 4.5 1.0 4.5 8.0 4.5 4.5
522 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5
527 5.0 5.0 5.0 5.0 5.0 5.0 1.0 5.0
533 4.0 4.0 4.0 4.0 1.0 7.5 4.0 7.5
535 1.0 5.0 5.0 5.0 5.0 5.0 5.0 5.0
542 5.5 5.5 1.5 5.5 5.5 5.5 1.5 5.5
543 2.5 6.5 6.5 2.5 6.5 6.5 2.5 2.5
557 4.5 4.5 4.5 4.5 4.5 4.5 4.5 4.5
558 2.5 2.5 6.5 2.5 6.5 6.5 6.5 2.5
560 5.5 5.5 5.5 1.5 5.5 5.5 1.5 5.5
567 4.0 4.0 4.0 4.0 4.0 4.0 4.0 8.0
569 1.0 7.0 7.0 2.0 4.0 4.0 7.0 4.0
578 4.0 8.0 4.0 4.0 4.0 4.0 4.0 4.0
581 5.0 5.0 5.0 5.0 5.0 5.0 1.0 5.0
582 2.5 6.5 6.5 2.5 2.5 2.5 6.5 6.5
584 5.5 5.5 5.5 1.5 1.5 5.5 5.5 5.5
如果我要将MEMORY1的值制成表格,我会得到以下结果:
> table(d$MEMORY1)
1 1.5 2.5 4 4.5 5 5.5 6 7
2 1 3 3 3 2 4 1 1
所以我可以看到5.5是这里的模式,我尝试as.numeric(names(table(d$MEMORY1))[which.max(table(d$MEMORY1))])
确实返回5.5。这非常笨重,我如何在data.frame
的所有8列上迭代这个?我希望得到的矢量包含8种模式(一种对应于每一列)。这是一种优雅的方式吗?
答案 0 :(得分:2)
此post提供了一个优雅的功能来确定模式,因此您只需将其应用于数据框。
Mode <- function(x) {
ux <- unique(x)
ux[which.max(tabulate(match(x, ux)))]
}
apply(d, 2, Mode)
收率:
MEMORY1 MEMORY2 MEMORY3 MEMORY4 MEMORY5 MEMORY6 MEMORY7 MEMORY8
5.5 5.5 4.5 1.5 4.5 5.5 4.5 5.5