1

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

我有一个类似的数据框

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)

但我找不到第二高价值的方法。它可能需要某种功能,但我找不到如何去做。

4

1 回答 1

1

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

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

do.call(mapply, c(function(...) sort(c(...), dec=TRUE)[1:2],
        df[grepl("v", names(df))]))
于 2013-07-19T12:11:40.487 回答