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:
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?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With