2013-11-15 8 views
21

次のように定義されるRに2つのベクトルがあるとします。2つのベクトル間でペアワイズ最大値を取るにはどうすればよいですか?

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

式内で実行することができます私にaの要素とbの要素間のペアごとの最大値を与える関数は、ありますか?

私はしようとしましたが、max(a,b)ですが、希望の出力が得られません。

所望の出力:

(3,4,6) 

実際の出力:

6 

答えて

27

ペアごとの最大値、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 
} 
+0

もう一つの拡張は、ということです'pmax(a、b、c)'や 'do.call(pmax、list(a、b、c))'のような2つ以上のベクトルに対応しています。 – lmo

関連する問題