Supposed I have a vector:
v <- c(a=1, b=2, c=3, d=4)
v
a b c d
1 2 3 4
I would like to create a new vector, new_v
, such that: if an element can be found in v
, it equals to the value in v
, otherwise assign to 0
. For example, e
, f
, and g
don't exist in v
and they all are assigned as 0, such that:
> new_v
a b c d e f g
1 2 3 4 0 0 0
I know it can be created by ifelse
for each eletment. Since I have a long vector, I am wondering what the best way to create it.
CodePudding user response:
Use setdiff
with the names
of the vector and assign those to 0 instead of a conditional expression
v[setdiff(letters[1:7], names(v))] <- 0
-output
> v
a b c d e f g
1 2 3 4 0 0 0
CodePudding user response:
Another possible solution, based on intersect
:
v <- c(a=1, b=2, c=3, d=4)
new_v <- rep(0, 7)
names(new_v) <- letters[1:7]
new_v[intersect(names(v), names(new_v))] <- v
new_v
#> a b c d e f g
#> 1 2 3 4 0 0 0