很抱歉,如果我问一个微不足道的问题,但事实是我花了几个小时在这个数据库中阅读答案,但找不到我要找的东西。
我有一个与此类似的数据框
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)
但我无法找到第二个最高值的方法。 它可能需要某种功能,但我找不到怎么做。
答案 0 :(得分:1)
请注意,@ krlmlr链接的问题中接受的答案是可疑的,因为apply
可能会破坏数据帧。在这种情况下,这并不重要,因为所有列都必须是数字才能使问题有意义,但我宁愿在安全方面犯错误。
相反,将do.call
与mapply
一起使用,并说服它将df视为列表:
do.call(mapply, c(function(...) sort(c(...), dec=TRUE)[1:2],
df[grepl("v", names(df))]))