我有这样一个数据帧:计算频率
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))
没有运气一些事情。请帮忙。
我有这样一个数据帧:计算频率
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))
没有运气一些事情。请帮忙。
另一种简单的方法:
summary(df[,1]) #where df is your data frame and you want the 1st column counts ("Expt")
注意:第一列是factor
,这适用于任何列其中是factor
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
甲data.table
溶液(以计数重复次数)
library(data.table)
df <- data.table(df)
df[,list(max = .N),by='Expt']
如果你想最大一列,然后使用
df[,list(max = max(Replicate)),by='Expt']
谢谢大家。我也发现这个工程:
aggregate(as.numeric(df$Replicate), list(exptCount=df$expt),max)
另一种方式来实现你的目标是
> 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))
我觉得术语这里有点混乱。你真的想要建立一个单向应变表,而不是按组来找到“最大值”。 “max”通常指的是从输入向量中找出最大值或最小值,并且与该组的观察总数无关。 – Chase 2012-07-12 12:37:27
我同意这个术语不正确。也许*我如何计算每个因子的重复次数*会是一个更好的标题(因为这是接受的答案的答案)(我的答案被编辑以反映这一点) – mnel 2012-07-13 00:43:29