我有一个数据框如下.我想为每一行获得一列最大值.但是如果该列存在于该行中,则该列应忽略值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
Run Code Online (Sandbox Code Playgroud)
tal*_*lat 20
这是一种可能性:
df$colMax <- apply(df, 1, function(x) max(x[x != 9]))
Run Code Online (Sandbox Code Playgroud)
MrF*_*ick 16
这个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
Run Code Online (Sandbox Code Playgroud)