Подтвердить что ты не робот

максимальный максимум для R

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

df <- data.frame(age=c(5,6,9), marks=c(1,2,7), story=c(2,9,1))
df$max <- apply(df, 1, max)    
df
4b9b3361

Ответ 1

Здесь есть одна возможность:

df$colMax <- apply(df, 1, function(x) max(x[x != 9]))

Ответ 2

Здесь была бы полезной функция pmax. Единственный улов состоит в том, что в качестве параметров требуется куча векторов. Вы можете преобразовать data.frame в параметры с do.call. Я также установил 9 значений в NA, как это было предложено другими, но сделайте это, используя несколько нетрадиционную is.na<-.

do.call(pmax, c('is.na<-'(df, df==9), na.rm=T))
# [1] 5 6 7

Ответ 3

Замените 9 на NA а затем используйте pmax как было предложено @MrFlick в его удаленном ответе:

df2 <- df #copy df because we are going to change it
df2[df2==9] <- NA
do.call(function(...) pmax(..., na.rm=TRUE), df2)
#[1] 5 6 7

Ответ 4

#make a copy of your data.frame
tmp.df <- df
#replace the 9s with NA
tmp.df[tmp.df==9] <- NA
#Use apply to process the data one row at a time through the max function, removing NA values first
apply(tmp.df,1,max,na.rm=TRUE)