如何在两个向量之间选择最大对?

时间:2013-11-15 06:04:41

标签: r

假设我在R中有两个向量,定义如下。

a = c(3,3,5)
b = c(2,4,6)

是否有一个函数可以在a的元素和b的元素之间提供最大的成对,可以在公式中运行?

我试图这样做,max(a,b)但它没有获得所需的输出。

期望的输出:

(3,4,6)

实际输出:

6

3 个答案:

答案 0 :(得分:39)

成对最大值pmax(a, b)将给出c(3,4,6)

a <- c(3,3,5,NA,1)
b <- c(2,4,6,0,NA)

pmax(a, b)
# [1]  3  4  6 NA NA

pmax(a, b, na.rm = TRUE)
# [1] 3 4 6 0 1

还有成对的最低

pmin(a, b)
# [1]  2  3  5 NA NA

pmin(a, b, na.rm = TRUE)
# [1] 2 3 5 0 1

我从this question/answer提取的一对总和对我来说非常有用:

psum(a, b) # == a + b
# [1]  5  7 11 NA NA

psum(a, b, na.rm = TRUE)
# [1]  5  7 11  0  1

psum(c(-1, NA, 4), c(0, NA, NA))
# [1] -1 NA NA

psum(c(-1, NA, 4), c(0, NA, NA), na.rm = TRUE)
# [1] -1 NA  4

psum <- function(..., na.rm = FALSE) {
  dat <- do.call(cbind, list(...))
  res <- rowSums(dat, na.rm = na.rm) 
  idx_na <- !rowSums(!is.na(dat))
  res[idx_na] <- NA
  res 
}

答案 1 :(得分:0)

牺牲b的另一种方法:

# Where does b have smaller elements?
elsb <- which(a > b)
b[elsb] <- a[elsb]
b
# [1] 3 4 6

答案 2 :(得分:0)

实际上,替代解决方案值得一提。将其用于短向量。

向量a和b较短时,速度会快很多。更改代码中的变量s,您可以自己尝试一下。向量的长度为100(s = 20)时,PS C:\Users\admin> docker volume inspect test [ { "CreatedAt": "2020-05-01T10:59:22Z", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/test/_data", "Name": "test", "Options": {}, "Scope": "local" } 两倍快pmax_new在向量长度为​​2.500(s = 500)时超过了替代项。

pmax