We can do this with a simple inner_join
:
library(dplyr)
DATA %>%
inner_join(NAMES, by = "symbols") %>%
select(symbols = gene_id, sample1:sample3)
or with Base R:
output <- merge(NAMES, DATA, by = "symbols")[,-1]
names(output)[1] <- 'symbols'
Output:
symbols sample1 sample2 sample3
1 ENSMUSG00000000001 1 3 3
2 ENSMUSG00000000003 1 3 3
3 ENSMUSG00000000028 3 3 3
Data:
DATA <- structure(list(symbols = c("Gnai3", "Pbsn", "Cdc45"), sample1 = c(1L,
1L, 3L), sample2 = c(3L, 3L, 3L), sample3 = c(3L, 3L, 3L)), class = "data.frame", row.names = c(NA,
-3L))
NAMES <- structure(list(gene_id = c("ENSMUSG00000000001", "ENSMUSG00000000003",
"ENSMUSG00000000028"), symbols = c("Gnai3", "Pbsn", "Cdc45")), class = "data.frame", row.names = c(NA,
-3L))