我有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)
答案 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