Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Find the associated values of a vector in a dataframe

Tags:

dataframe

r

I have a reference dataframe df which determines the relationship between a number code and the name associated to it.

df <- data.frame(Number = 1:5,
                 Name = c("Aaa", "Bbb", "Ccc", "Ddd", "Eee"))

Now, I have a vector of numbers number <- c(1,1,3,5,6) and I want to get their corresponding Name, taking into account that:

  • There are repeated numbers
  • Some of the numbers may not have an associated name in the table

So, the result I expect is:

df2 <- data.frame(number,
                  Name = c("Aaa", "Aaa", "Ccc", "Eee", NA))

The vector of numbers I have is very long, any idea about how to do it?

like image 813
R18 Avatar asked Sep 02 '25 10:09

R18


1 Answers

If performance is the issue ("The vector of numbers I have is very long") one potential option is to use data.table, e.g.

library(data.table)

df <- data.frame(Number = 1:5,
                 Name = c("Aaa", "Bbb", "Ccc", "Ddd", "Eee"))

number <- c(1,1,3,5,6)
number_df <- as.data.frame(number)

setDT(df)
setDT(number_df)

number_df[df, name:=Name, on=.(number=Number)]
number_df
#>    number name
#> 1:      1  Aaa
#> 2:      1  Aaa
#> 3:      3  Ccc
#> 4:      5  Eee
#> 5:      6 <NA>

df2 <- data.table(number,
                  name = c("Aaa", "Aaa", "Ccc", "Eee", NA))
all.equal(number_df, df2)
#> [1] TRUE

Created on 2023-05-23 with reprex v2.0.2

like image 169
jared_mamrot Avatar answered Sep 04 '25 01:09

jared_mamrot