【发布时间】:2016-07-08 10:26:44
【问题描述】:
我有一个这样的数据集:
Island,Individual,all1,all2
Santiago,CVW3,01,01
Santiago,CVW8,01,02
Santiago,CVW9,03,03
Santiago,CVW10,01,01
Santiago,CVW12,03,03
Santiago,CVW19,01,01
Santiago,CVW25,01,04
Santiago,CVW39,04,04
Santiago,CVW40,01,01
Santiago,CVW41,01,01
Fogo,CVW64,04,04
Fogo,CVW67,01,01
Fogo,CVW70,02,04
Fogo,CVW74,03,05
Fogo,CVW80,01,02
Fogo,CVW99,01,04
Fogo,CVW101,02,02
Fogo,CVW103,01,02
Fogo,CVW104,01,04
Fogo,CVW111,02,04
SaoNicolau,CVW81,01,01
SaoNicolau,CVW87,01,01
SaoNicolau,CVW92,01,01
SaoNicolau,CVW124,01,01
SaoNicolau,CVW125,01,01
SaoNicolau,CVW133,01,01
SaoNicolau,CVW136,01,01
all1 和 all2 中的数据是因子。 我需要计算 all1 和 all2 中每个因子的组合频率,包括 Island 的每个子集和整个数据集。 所以对于 Santiago 和 01,频率是:12/20。
我一直致力于将数据集拆分为孤岛:
#Get data subset for Santiago:
stsplit = subset(locus, locus$Island == "Santiago")
allfr1st = count(stsplit, "all1")
allfr2st = count(stsplit, "all2")
#Rename headers:
names(allfr1st) = c("Allele", "Freq")
names(allfr2st) = c("Allele", "Freq")
这给了我: allfr1st:
Allele,Freq
01,7
03,2
04,1
allfr2st:
Allele,Freq
01,5
02,1
03,2
04,2
现在我想将两个数据帧的每个等位基因的频率相加,所以我会得到以下结果
Allele,Freq
01,12
02,1
03,4
04,3
merge() 不包括等位基因 02,因为它不在两个数据集中。
如何以正确的方式将两者结合起来?
如果有(并且肯定有)一种更明显的方式来获得我想要的东西(整体和岛屿内的频率 01、02、03 等),请随时给我建议。
【问题讨论】:
-
如果您使用的是微卫星数据,请查看
adegenet包。 -
你可以使用
merge(all.x=T,all.y=T,...) -
@RomanLuštrik,感谢您的建议。这不是 ms 数据,而是来自功能性 DNA 的等位基因。但我认为adegenet 包可以做我想做的事——计算预期的杂合性。但是,我已经尝试过使用 adegenet 包,但在 R 中接受我的数据时遇到了很多麻烦。
-
@Jason,谢谢。这基本上给了我与
rbind()相同的信息,尽管排序不同。我想要的是在 Freq 上求和的数据。所以如果 01 在两个数据集中,我想要求和的频率。如果 01 不是两个数据集,我仍然希望包含它。
标签: r merge sum bioinformatics