返回pmax函数输出的属性

时间:2016-09-26 11:42:27

标签: r

我有以下数字向量xy

x <- c(a=1,b=2,c=3)
y <- c(d=2,e=1,f=4)

我想找到向量中每个元素的平行最大值,所以我使用了:

> pmax(x,y)
a b c 
2 2 4 

输出具有正确的值,但是,它返回错误的名称。 pmax的文档提到它返回第一个参数的属性,因此返回a b c。有没有办法获取最大值的名称?所需的输出如下:

d b f
2 2 4

2 个答案:

答案 0 :(得分:3)

一个选项是使用max.col来查找每行最大值的索引。为此,我们需要通过cbind向量(&#39; xy&#39;)及其names(&#39; nmxy&#39;)来创建矩阵/ data.frame。创建一个行/列索引(&#39; ij&#39;)并对&#39; xy&#39;的元素进行子集化。并从&#39; nmxy&#39;。

中设置名称
xy <- cbind(x,y)
nmxy <- cbind(names(x), names(y))
ij <- cbind(1:nrow(xy), max.col(xy))
setNames(xy[ij], nmxy[ij])
#  d b f 
#  2 2 4 

答案 1 :(得分:1)

r <- pmax(x,y)

只需在函数重命名命令后添加

names(r)[y == r] <- names(y)[y == r]

如果您想要花哨,可以重载pmax函数以获得所需的输出。

old.pmax = pmax
pmax <- function(x,y){

  r <- old.pmax(x,y)
  names(r)[y == r] <- names(y)[y == r]
  return(r)
}