我有一个A
带有name
and的数据框type
。
name aa tt gg cc aa at ag ac
type 3 2 4 3 2 2 3 3
如何创建一个新的排名 data.frameB
并type
计算该类型在 data.frame 中出现的次数A
?
count 4 3 1
type 3 2 4
感谢您的帮助。
我有一个A
带有name
and的数据框type
。
name aa tt gg cc aa at ag ac
type 3 2 4 3 2 2 3 3
如何创建一个新的排名 data.frameB
并type
计算该类型在 data.frame 中出现的次数A
?
count 4 3 1
type 3 2 4
感谢您的帮助。
一种选择是table()
功能。对于您的数据:
dat <- data.frame(name = c("aa","tt","gg","cc","aa","at","ag","ac"),
type = c(3,2,4,3,2,2,3,3))
它给:
> (tab <- with(dat, table(type)))
type
2 3 4
3 4 1
现在我们只需要对其进行排序:
> sort(tab, decreasing = TRUE)
type
3 2 4
4 3 1
当然,这些步骤可以组合起来:
> with(dat, sort(table(type), decreasing = TRUE))
type
3 2 4
4 3 1
另外两种可能更快的方法:
rev(sort(tapply(dat$type, dat$type, length)))
x <- do.call('data.frame', (rle(sort(dat$type)))); x[order(-x$lengths), ]
编辑:在 Gavin 的数据集上没有,他提出的表格方法是最快的(在 win7 机器上使用微基准测试):
Unit: microseconds
expr min lq median uq max
1 RLE 614.452 650.376 669.971 713.3605 104852.7
2 TABLE 562.664 586.691 607.453 645.9440 128596.5
3 TAPPLY 585.525 626.115 643.144 689.0995 118123.8