计算频率

时间:2012-07-11 23:20:38

标签: r dataframe

我有一个这样的数据框:

Expt    Replicate
A       1
A       2
A       3
B       1
B       2
B       3
C       1
C       2
C       3
C       4

我想返回每个实验的重复次数。像这样:

Expt    #Reps
A       3
B       3
C       4

这必须非常简单,但我尝试了一些像

这样的东西
ddply(df, Expt, .fun=max(Replicate))
没有运气。请帮忙。

5 个答案:

答案 0 :(得分:4)

table是你的朋友。您甚至不需要第二列,table会为您计算第一列中的项目:

> x <- c('A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C')
> x
 [1] "A" "A" "A" "B" "B" "B" "C" "C" "C" "C"
> table(x)
x
A B C 
3 3 4 

答案 1 :(得分:4)

data.table解决方案(计算重复次数)

library(data.table)
df <- data.table(df)
df[,list(max = .N),by='Expt']

如果您想要最大列,请使用

df[,list(max = max(Replicate)),by='Expt']

答案 2 :(得分:3)

谢谢大家。我也发现这个有用:

aggregate(as.numeric(df$Replicate), list(exptCount=df$expt),max)

答案 3 :(得分:2)

实现目标的另一种方法是

> df <- data.frame(Expt = rep(c('A', 'B', 'C'), c(3,3,4)), Replicate = append(rep(1:3, 3), 4, 10))
> tapply(df$Replicate, df$Expt, max)
A B C 
3 3 4 

但如果您真的想使用ddply,可以尝试:

library(plyr)
ddply(df,.(Expt),numcolwise(max))

答案 4 :(得分:-1)

另一种简单的方法:

 summary(df[,1]) #where df is your data frame and you want the 1st column counts ("Expt")

注意:第一列是factor,这适用于factor

的所有列