Home > Net >  Merging 2 Vectors to 1 Vector that satisfies certain criteria
Merging 2 Vectors to 1 Vector that satisfies certain criteria

Time:10-20

I have two vectors that can be written as follows:

aa <- c(0, 0, 0, 0, 1, 0, 0, 0)
bb <- c(0, 2, 0, 0, 3, 1, 1, 1)

I want to merge these vectors such that the rest of vector bb takes the value zero when vector aa interfere with the value 1. In this example the result should look like:

cc <- c(0, 2, 0, 0, 3, 0, 0, 0) 

What is the fastest and most efficient way to do this in R?

CodePudding user response:

We may do

library(dplyr)
ifelse(lag(cummax(aa), default = 0) == 0, bb, aa)
[1] 0 2 0 0 3 0 0 0

Or another way is

bb * !c(0, head(cummax(aa), -1))
[1] 0 2 0 0 3 0 0 0

Or another option

ind <- (which.max(aa)   1):length(aa)
bb[ind] <- aa[ind]
> bb
[1] 0 2 0 0 3 0 0 0

CodePudding user response:

This is maybe too much for this task. At least for me it is easier to follow:

library(dplyr)
cc <- tibble(aa,bb) %>% 
  group_by(id_group=lag(cumsum(aa==1), default = 0)) %>% 
  mutate(cc = ifelse(id_group == 0, coalesce(bb,aa), coalesce(aa,bb))) %>% 
  pull(cc)

output:

[1] 0 2 0 0 3 0 0 0
  • Related