2014-07-03 45 views
1

我有一个数据帧,看起来像这样:有没有办法让tapply处理两个索引值(或equivilent)?

index1 <- c(rep("A", 3), rep("B", 3), rep("C", 3)) 
index2 <- rep(c("X", "Y", "Z"), 3) 
value <- sample(1:100, 9) 
SEdata <- data.frame(index1, index2, value) 

我想是每一个组合index1index2最大value(即最大所有AX,最大所有AY的,等等...)

我一直在使用tapply这样的尝试:

tapply(SEdata$value, SEdata$index1 & SEdata$index2, max) 

...但是这显然不没有工作。

有没有办法让tapply能够处理2个索引条件,还是有更好的方法来处理这个问题?

+0

'for'循环已过时。使用更先进/高效的方法,如'data.table'。 '库(data.table); setDT(SEdata)[,list(max = max(value)),by = list(index1,index2)]' –

回答

3

提供的两个因素为列表

tapply(SEdata$value, list(SEdata$index1, SEdata$index2), max) 
1

如果我正确理解你的问题,这里的一般结构是使用list:获得

> tapply(SEdata$value, list(SEdata$index1, SEdata$index2), max) 
    X Y Z 
A 27 37 57 
B 89 20 86 
C 97 62 58 

但你的样本数据是不是为了这个目的:-)

很精彩(数字使用set.seed(1)。)

相关问题