【发布时间】:2019-03-20 10:09:55
【问题描述】:
我有两个数据框,我想做一个匹配和合并。 最初我使用的是 inner_join 和 coalesce,但意识到匹配部分没有正确匹配。
我找到了一个似乎方向正确的示例 How to merge two data frame based on partial string match with R? 。建议使用此代码的一个答案:
idx2 <- sapply(df_mouse_human$Protein.IDs, grep, df_mouse$Protein.IDs)
idx1 <- sapply(seq_along(idx2), function(i) rep(i, length(idx2[[i]])))
merged <- cbind(df_mouse_human[unlist(idx1),,drop=F], df_mouse[unlist(idx2),,drop=F])
然而它失败了。问题是我想用作模式匹配的数据集,其字符串比我想要匹配的字符串长,因此不匹配任何内容。让我展示一部分数据:
dput(droplevels(df_mouse))
structure(list(Protein.IDs = c("Q8CBM2;A2AL85;Q8BSY0", "A2AMH3;A2AMH5;A2AMH4;Q6X893;Q6X893-2;A2AMH8",
"A2AMW0;P47757-2;A2AMV7;P47757;F6QJN8;F6YHZ8;F7CAZ6", "Q3U8S1;A2APM5;A2APM3;A2APM4;E9QKM8;Q80X37;A2APM1;A2APM2;P15379-2;P15379-3;P15379-6;P15379-11;P15379-5;P15379-10;P15379-9;P15379-4;P15379-8;P15379-7;P15379;P15379-12;P15379-13",
"A2ASS6;E9Q8N1;E9Q8K5;A2ASS6-2;A2AT70;F7CR78", "A2AUR7;Q9D031;Q01730"
), Replicate = c(2L, 2L, 2L, 2L, 2L, 2L), Ratio.H.L.normalized.01 = c(NaN,
NaN, NaN, NaN, NaN, NaN), Ratio.H.L.normalized.02 = c(NaN, NaN,
NaN, NaN, NaN, NaN), Ratio.H.L.normalized.03 = c(NaN, NaN, NaN,
NaN, NaN, NaN)), .Names = c("Protein.IDs", "Replicate", "Ratio.H.L.normalized.01",
"Ratio.H.L.normalized.02", "Ratio.H.L.normalized.03"), row.names = 12:17, class = "data.frame")
dput(droplevels(df_mouse_human))
structure(list(Human = c("Q8WZ42", "Q8NF91", "Q9UPN3", "Q96RW7",
"Q8WXG9", "P20929", "Q5T4S7", "O14686", "Q2LD37", "Q92736"),
Protein.IDs = c("A2ASS6", "Q6ZWR6", "Q9QXZ0", "D3YXG0", "Q8VHN7",
"E9Q1W3", "A2AN08", "Q6PDK2", "A2AAE1", "E9Q401")), .Names = c("Human",
"Protein.IDs"), row.names = c(NA, 10L), class = "data.frame")
所以我想将df_mouse 中的 Protein.ID 与它们在df_mouse_human 中存在的位置相匹配。在示例数据中,我尝试将 A2ASS6;E9Q8N1;E9Q8K5;A2ASS6-2;A2AT70;F7CR78 与条目 A2ASS6 匹配。如果我以另一种方式进行操作,效果会很好,但是有没有一种方法可以让模式的一部分与查询匹配,它会返回 TRUE?
我的长期目标是匹配和合并数据,以便 df_mouse 获得一个具有匹配人类蛋白质 ID 的新列,如果没有匹配,我将用原始的鼠标 ID 字符串替换 NA 值.
谢谢
【问题讨论】:
-
您可能会有多个匹配项(在您的真实数据中),您打算输出什么?另外,您对样本数据提出了一个很好的问题,但是那里的所有内容中只有一个匹配项,那是否具有代表性?也就是说(根据我的第一个问题),如果您实际上连续获得两个
Human匹配项,您打算发生什么?
标签: r merge pattern-matching