Каждый раз, когда я думаю, что понимаю работу с векторами, то, что кажется простой проблемой, превращает мою голову наизнанку. Множество чтений и попыток разных примеров не помогло по этому поводу. Пожалуйста, ложь, кормите меня здесь...
Я хочу применить две пользовательские функции к каждой строке фрейма данных и добавить результаты в виде двух новых столбцов. Вот мой пример кода:
# 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 и более базовый подход. Оба помогут в моем понимании. Конечно, пожалуйста, укажите, где я ошибаюсь, если это очевидно.; -)
Теперь вернемся к файлам справки для меня!
Изменить: я хотел бы, чтобы многомерное решение, поскольку имена столбцов могут меняться и расширяться со временем. Это также позволяет повторно использовать код в будущем.