2014-02-12 5 views
0

Я хочу создать логический столбец, в котором указано, является ли каждый образец максимальным. Я сделал эту функцию и использовать его с tapply:Как сделать логическую переменную из итоговой статистики в dataframe?

is.max <- function(x){ 
    x <- data.frame(x) 
    x$x <- round(x$x,5) 
    x_max <- round(max(x),5) 
    for(i in 1:nrow(x)) { 
    if(x$x[i] == x_max) x$is.max[i] <- T 
    else x$is.max[i] <- F 
    } 
return(x$is.max) 
} 

y <- c(rnorm(10), runif(10), rnorm(10,1)) 
f <- gl(3,10) 
m <- tapply(y,f,is.max) 

Но есть лучший и эффективный способ сделать это?

{P.S. Фактически с моими настоящими данными я использовал sapply, например. is.maxes<-sapply(s, function(x) is.max(x[,"Sum"]),simplify=F)}

ответ

1

Да, вы можете использовать это сделать в одной строке с tapply:

tapply(y,f,function(x) round(x,5)==round(max(x),5)) 
+0

Эй ничего себе, я буду помнить, что! – plamtrue