我正在尝试编写一些代码来识别每行的最大两个值并提供它们的列号和值。
df = data.frame( car = c (2,1,1,1,0), bus = c (0,2,0,1,0),
walk = c (0,3,2,0,0), bike = c(0,4,0,0,1))
max
我已经设法让它使用andmax.col
函数来实现最大值。
df$max = max.col(df,ties.method="first")
df$val = apply(df[ ,1:4], 1, max)
据我所知,没有第二高值的等效函数,所以这样做让事情变得有点棘手。使用此代码提供了第二高的价值,但(重要的是)不是在有关系的情况下。而且看起来风险很大。
sec.fun <- function (x) {
max( x[x!=max(x)] )
}
df$val2 <- apply(df[ ,1:4], 1, sec.fun)
理想情况下,该解决方案不涉及删除任何原始数据,并且可用于找到第三、第四……最高值,但这些都不是基本要求。