根据逻辑第3列加入2列

时间:2017-09-07 23:54:00

标签: r

我有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时使用来自'a'的观察,当c为FALSE时使用来自'b'的观察。 结果显示为:

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

3 个答案:

答案 0 :(得分:3)

使用ifelse

可以轻松完成此操作
d <- ifelse(c, a, b)

答案 1 :(得分: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

答案 2 :(得分: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