From below code, mutate.(matched = a %in% vector_b)
is in question.
library(tidytable)
df_a = data.frame(a = round(rnorm(2)))
df_b = data.frame(b = round(rnorm(2)))
vector_b = df_b |> pull.()
myfunction = function(df_matched, df_a, a, vector_b) {
df_matched = df_a |>
mutate.(matched = a %in% vector_b)
return(df_matched)
}
df_matched = myfunction(df_matched, df_a, b, vector_b)
df_matched |> count.(matched)
# A tidytable: 2 × 2
# matched N
# <lgl> <int>
#1 FALSE 1
#2 TRUE 1
I was just wondering if there is another way to achieve the same thing as mutate.(matched = a %in% vector_b)
without using %in%
.
sure, you can use is.element()
e.g.:
is.element(1:2, 1:10)
[1] TRUE TRUE
is.element(-2:-1, 1:10)
[1] FALSE FALSE
if you look at the code for both is.element, and %in% they are both effectively wrapping the match function.
> is.element
function (el, set)
match(el, set, 0L) > 0L
> `%in%`
function (x, table)
match(x, table, nomatch = 0L) > 0L
Therefore using match more directly is an option.
However, I would generally just use %in% because its eminently more readable to me.
system
Closed
4
This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.
If you have a query related to it or one of the replies, start a new topic and refer back with a link.