特定类别的频率计数

时间:2013-07-09 20:19:19

标签: r frequency

我有这样的数据集。

a <- structure(list(Prone = c("M", "N", "N", "N", "M", "N", "M", "N", "M", "M"), 
Type = c("A", "B", "C", "A", "A", "A", "B", "B", "C", "B"), 
Alc = c("A", "B", "N", "A", "A", "A", "B", "B", "B", "B"), 
Com = c("Y", "N", "Y", "Y", "Y", "Y", "Y", "N", "N", "Y")),
.Names = c("Prone", "Type", "Alc", "Com"), row.names = c(NA, -10L), class = "data.frame")
a
   Prone Type Alc Com
1      M    A   A   Y
2      N    B   B   N
3      N    C   N   Y
4      N    A   A   Y
5      M    A   A   Y
6      N    A   A   Y
7      M    B   B   Y
8      N    B   B   N
9      M    C   B   N
10     M    B   B   Y

我喜欢得到每个唯一行的频率计数,如下所示:

  Prone Type Alc Com Freq
1     M    A   A   Y    2
2     M    B   B   Y    2
3     M    C   B   N    1
4     N    A   A   Y    2
5     N    B   B   N    2
6     N    C   N   Y    1

提前致谢。

5 个答案:

答案 0 :(得分:8)

替代plyr解决方案:

> library("plyr")
> count(a)
  Prone Type Alc Com freq
1     M    A   A   Y    2
2     M    B   B   Y    2
3     M    C   B   N    1
4     N    A   A   Y    2
5     N    B   B   N    2
6     N    C   N   Y    1

答案 1 :(得分:7)

强制性data.table解决方案:

library(data.table)
dt = data.table(a)

dt[, list(Freq = .N), by = names(dt)]

答案 2 :(得分:6)

有很多方法可以做到这一点,这里有一个简单的plyr示例:

> library(plyr)
> ddply(a,names(a),summarize,Freq=length(Prone))
  Prone Type Alc Com Freq
1     M    A   A   Y    2
2     M    B   B   Y    2
3     M    C   B   N    1
4     N    A   A   Y    2
5     N    B   B   N    2
6     N    C   N   Y    1

答案 3 :(得分:6)

使用基础aggregate

aggregate(data = transform(a, Freq = seq_len(nrow(a))), Freq ~ ., length)

  Prone Type Alc Com Freq
1     N    B   B   N    2
2     M    C   B   N    1
3     M    A   A   Y    2
4     N    A   A   Y    2
5     M    B   B   Y    2
6     N    C   N   Y    1

答案 4 :(得分:3)

这是另一种方法:

library(qdap)
colsplit2df(data.frame(table(paste2(a))), new.names = names(a))

## > colsplit2df(data.frame(table(paste2(a))), new.names = names(a))
##   Prone Type Alc Com Freq
## 1     M    A   A   Y    2
## 2     M    B   B   Y    2
## 3     M    C   B   N    1
## 4     N    A   A   Y    2
## 5     N    B   B   N    2
## 6     N    C   N   Y    1