web-dev-qa-db-ja.com

Rの行ごとの最大値

以下のようなデータフレームがあります。各行の最大値の列を取得したい。ただし、その行に値9がある場合、その列は値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
26
user2543622

1つの可能性があります。

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

ここでは、pmax関数が役立ちます。唯一の問題は、パラメーターとして多数のベクトルを使用することです。 do.callを使用して、data.frameをパラメーターに変換できます。また、他の人が提案したように9つの値をNAに設定しますが、やや型破りなis.na<-コマンドを使用して設定します。

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

代替9NAを使用し、@ MrFlickの削除された回答で示唆されているようにpmaxを使用します。

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
Roland
#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)
1
russellpierce