我有以下数字向量x
和y
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
答案 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)
}