在R数据框中创建列,每行中具有第二高的值

时间:2013-07-19 11:55:17

标签: r dataframe calculated-columns

很抱歉,如果我问一个微不足道的问题,但事实是我花了几个小时在这个数据库中阅读答案,但找不到我要找的东西。

我有一个与此类似的数据框

df=data.frame(v1=c(24,15, 0, 7,36,10), c1=c(22,15,0,0,28,11), v2=c(0,10,0,19,0,0), c2=c(0,7,0,22,0,0), v3=c(54,22,28,55,62,38), c3=c(44,23,22,66,71,44))

(原来,当然还有更多的行和列)

我想创建两列,其中包含所有“v”列的最大值和第二高值。

最大限度,这有效:

df$max.v=mapply(FUN=max, df$v1, df$v2, df$v3, na.rm=TRUE)

但我无法找到第二个最高值的方法。 它可能需要某种功能,但我找不到怎么做。

1 个答案:

答案 0 :(得分:1)

请注意,@ krlmlr链接的问题中接受的答案是可疑的,因为apply可能会破坏数据帧。在这种情况下,这并不重要,因为所有列都必须是数字才能使问题有意义,但我宁愿在安全方面犯错误。

相反,将do.callmapply一起使用,并说服它将df视为列表:

do.call(mapply, c(function(...) sort(c(...), dec=TRUE)[1:2],
        df[grepl("v", names(df))]))