Применить несколько функций к каждой строке фрейма данных

Каждый раз, когда я думаю, что понимаю работу с векторами, то, что кажется простой проблемой, выворачивает мою голову наизнанку. Много читать и пробовать разные примеры в данном случае не помогло. Пожалуйста, накормите меня ложкой ...

Я хочу применить две пользовательские функции к каждой строке фрейма данных и добавить результаты в виде двух новых столбцов. Вот мой пример кода:

# Required packages:
library(plyr)

FindMFE <- function(x) {
    MFE <- max(x, na.rm = TRUE) 
    MFE <- ifelse(is.infinite(MFE ) | (MFE  < 0), 0, MFE)
    return(MFE)
}

FindMAE <- function(x) {
    MAE <- min(x, na.rm = TRUE) 
    MAE <- ifelse(is.infinite(MAE) | (MAE> 0), 0, MAE)
    return(MAE)
}

FindMAEandMFE <- function(x){
        # I know this next line is wrong...
    z <- apply(x, 1, FindMFE, FindMFE)
        return(z)
}

df1 <- data.frame(Bar1=c(1,2,3,-3,-2,-1),Bar2=c(3,1,3,-2,-3,-1))

df1 = transform(df1, 
    FindMAEandMFE(df1)  
)

#DF1 should end up with the following data...
#Bar1   Bar2    MFE MAE
#1      3       3   0
#2      1       2   0
#3      3       3   0
#-3     -2      0   -3
#-2     -3      0   -3
#-1     -1      0   -1

Было бы здорово получить ответ, используя библиотеку plyr и более базовый подход. Оба помогут в моем понимании. Конечно, укажите, где я ошибаюсь, если это очевидно. ; -)

А теперь вернемся к файлам справки для меня!

Изменить: я хотел бы многомерное решение, так как имена столбцов могут изменяться и расширяться со временем. Это также позволяет повторно использовать код в будущем.

20
задан Look Left 25 August 2011 в 01:44
поделиться