R的行最大值

时间:2014-06-30 19:06:28

标签: r max

我有一个如下数据框。我想为每一行获得一列最大值。但是如果该列存在于该行中,则该列应忽略值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

4 个答案:

答案 0 :(得分:20)

这是一种可能性:

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

答案 1 :(得分:15)

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

答案 2 :(得分:3)

9替换为NA,然后根据@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

答案 3 :(得分:1)

#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)