r创建一个使用类型的频率的汇总表

时间:2012-05-04 20:39:11

标签: r

我的数据框A包含nametype

name    aa  tt  gg  cc  aa  at  ag  ac

 type    3   2   4   3   2   2   3   3

如何使用B创建新的排名data.frame type并计算次数 类型发生在data.frame A

count   4   3   1   

type    3   2   4   

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

一个选项是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

答案 1 :(得分: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