2012-07-11 287 views
1

我有这样一个数据帧:计算频率

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)) 

没有运气一些事情。请帮忙。

+1

我觉得术语这里有点混乱。你真的想要建立一个单向应变表,而不是按组来找到“最大值”。 “max”通常指的是从输入向量中找出最大值或最小值,并且与该组的观察总数无关。 – Chase 2012-07-12 12:37:27

+1

我同意这个术语不正确。也许*我如何计算每个因子的重复次数*会是一个更好的标题(因为这是接受的答案的答案)(我的答案被编辑以反映这一点) – mnel 2012-07-13 00:43:29

回答

-1

另一种简单的方法:

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

注意:第一列是factor,这适用于任何列其中是factor

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 
4

data.table溶液(以计数重复次数)

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

如果你想最大一列,然后使用

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

谢谢大家。我也发现这个工程:

aggregate(as.numeric(df$Replicate), list(exptCount=df$expt),max) 
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))