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

没有运气。请帮忙。

4

5 回答 5

4

A data.table solution (to counting the number of replicates)

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

If you want the maximum a column then use

df[,list(max = max(Replicate)),by='Expt']
于 2012-07-12T00:01:42.053 回答
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 
于 2012-07-11T23:28:34.070 回答
3

感谢大家。我还发现这很有效:

aggregate(as.numeric(df$Replicate), list(exptCount=df$expt),max)
于 2012-07-12T00:03:45.513 回答
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))
于 2012-07-12T09:31:36.450 回答
-1

另一种简单的方法:

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

注意:第一列是 afactor这适用于任何列factor

于 2012-07-11T23:52:59.947 回答