2014-07-03 50 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)。)

相關問題