Вместо ==
, используйте match
, чтобы получить индекс, потому что ==
выполняет поэлементное сравнение, и это создаст проблему в length
, если оба набора данных имеют разное количество строк, т.е. он сравнивает строку1 из first to row1 на second, row2 -> row2, row3 -> row3, и значения могут быть в любом месте столбца, которые, вероятно, будут пропущены, если мы сделаем ==
find_geneID <- function(x) {gene_id$gene_id[match(gene_list[[x]], gene_id$symbol)]}
gene_list %>%
mutate(gene_id = find_geneID('human_gene'))
# mouse_gene human_gene gene_id
#1 Ccnb1 SLCO2B1 23334
#2 Cdk1 PPP1R3C 100001
#3 Cdh3 MMP13 34553433
#4 Cdkn1c CLEC6A 22998
Кроме того, убедитесь, что столбцы character
класса вместо factor
при использовании stringsAsFactors = FALSE
при построении наборов данных
Это можно легко сделать с помощью объединения
left_join(gene_list, gene_id, by = c('human_gene' = 'symbol'))
# mouse_gene human_gene gene_id
#1 Ccnb1 SLCO2B1 23334
#2 Cdk1 PPP1R3C 100001
#3 Cdh3 MMP13 34553433
#4 Cdkn1c CLEC6A 22998
data
gene_list <- data.frame(mouse_gene = c("Ccnb1", "Cdk1", "Cdh3", "Cdkn1c"),
human_gene = c("SLCO2B1", "PPP1R3C", "MMP13", "CLEC6A"),
stringsAsFactors = FALSE)
gene_id <- data.frame(gene_id = c("23334", "100001", "12341236",
"34553433", "22998", "123121213"),
symbol = c("SLCO2B1", "PPP1R3C", "FX-232",
"MMP13", "CLEC6A", "CSCCD"), stringsAsFactors = FALSE)