【发布时间】:2011-08-17 19:59:39
【问题描述】:
获取数据帧的代码:
rat_all = structure(list(frequency = c(37L, 31L, 14L, 11L, 2L, 3L), isoforms = 8:13,
type = structure(c("rat_all", "rat_all", "rat_all", "rat_all",
"rat_all", "rat_all"), .Dim = c(6L, 1L))), .Names = c("frequency",
"isoforms", "type"), row.names = 8:13, class = "data.frame")
rat_ensembl = structure(list(frequency = c(17L, 8L, 20L), isoforms = 8:10,
type = structure(c("rat_ensembl", "rat_ensembl", "rat_ensembl"
), .Dim = c(3L, 1L))), .Names = c("frequency", "isoforms",
"type"), row.names = 8:10, class = "data.frame")
我有两个数据框:
frequency isoforms type
8 17 8 rat_ensembl
9 8 9 rat_ensembl
10 20 10 rat_ensembl
和
frequency isoforms type
8 37 8 rat_all
9 31 9 rat_all
10 14 10 rat_all
11 11 11 rat_all
12 2 12 rat_all
13 3 13 rat_all
我想将这些组合成一个数据框,但也包括缺失的
isoforms 出现在 rat_all 数据框中但不在 rat_ensembl 中的条目
数据框。所以我希望输出是一个组合数据框,就像我 rbinded
两个数据框,但增加了:
11 0 11 rat_ensembl
12 0 12 rat_ensembl
13 0 13 rat_ensembl
我以为我可以通过合并来做到这一点,但我最终得到了一个巨大的混乱,我必须解开,我最终可以按摩成正确的格式,但如果这不是一个好的解决方案 我想一次为四五个不同的“类型”做这个。我错过了什么?谢谢!
明确地说,我希望得到一个看起来像这样的最终数据框:
frequency isoforms type
1 17 8 rat_ensembl
2 8 9 rat_ensembl
3 20 10 rat_ensembl
4 37 8 rat_all
5 31 9 rat_all
6 14 10 rat_all
7 11 11 rat_all
8 2 12 rat_all
9 3 13 rat_all
10 0 11 rat_ensembl
11 0 12 rat_ensembl
12 0 13 rat_ensembl
如果我使用它,我可以让它做我想做的事:
z = merge(rat_ensembl, rat_all, by.x="isoforms", by.y="isoforms", all.y=TRUE)
isoforms frequency.x type.x frequency.y type.y
7 7 44 rat_ensembl 69 rat_all
8 8 17 rat_ensembl 37 rat_all
9 9 8 rat_ensembl 31 rat_all
10 10 20 rat_ensembl 14 rat_all
11 11 NA <NA> 11 rat_all
12 12 NA <NA> 2 rat_all
13 13 NA <NA> 3 rat_all
14 14 NA <NA> 1 rat_all
然后,理论上我可以选择isoforms、frequency.x、type.x 列和
修复它们,使它们对 rat_ensembl 和 rat_all 和 rbind 中的每一个都是正确的
数据框在一起,但似乎应该有一些东西可以直接处理它。
【问题讨论】:
-
你对合并有什么尝试?您要合并的常用列是什么?频率、异构体、类型?上述所有的?一旦确定了公共列,就可以通过指定“所有”参数来指定是否需要内连接、左连接、右连接或外连接。另外,您能否使用人们可以粘贴到他们的 R 会话中的代码 sn-p 来更新您的问题?使用
dput()并将内容粘贴到您的问题中。 -
感谢 dput 的建议,非常有帮助。我在帖子中添加了额外的信息。