2017-09-07 11 views
1

に基づいて2列に参加:は、次のように私は3つのベクトルを持っている論理的な3列

a <- c(1,2,3,4,5,6,7,8,9,10) 
b <- c(10,20,30,40,50,60,70,80,90,100) 
c <- c(TRUE,TRUE,TRUE,TRUE,TRUE,FALSE,FALSE,FALSE,FALSE,FALSE) 

私は新しいベクトルを生成したい、「」cがTRUEのときに使用してから観測されているからの観測で'b'は、cがFALSEのときに使用されます。これはifelseで簡単に行うことができます

d <- c(1,2,3,4,5,60,70,80,90,100) 

答えて

3

: 結果として表示されるでしょう

d <- ifelse(c, a, b) 
1

比較的単純な問題で、これは重複していない場合、私は驚くだろう。

library(dplyr) 

df <- tibble(
    a = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), 
    b = c(10, 20, 30, 40, 50, 60, 70, 80, 90, 100), 
    c = c(TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE) 
) 

df <- df %>% 
    mutate(d = if_else(c, a, b)) 

df 

# # A tibble: 10 x 4 
#  a  b  c  d 
# <dbl> <dbl> <lgl> <dbl> 
# 1  1 10 TRUE  1 
# 2  2 20 TRUE  2 
# 3  3 30 TRUE  3 
# 4  4 40 TRUE  4 
# 5  5 50 TRUE  5 
# 6  6 60 FALSE 60 
# 7  7 70 FALSE 70 
# 8  8 80 FALSE 80 
# 9  9 90 FALSE 90 
# 10 10 100 FALSE 100 
0

別のオプションは、row/columnインデックス

cbind(a, b)[cbind(seq_along(c), (!c)+1)] 
#[1] 1 2 3 4 5 60 70 80 90 100 

かであるpmax

pmax(a*c, b*!c) 
#[1] 1 2 3 4 5 60 70 80 90 100