【发布时间】:2018-02-12 18:14:21
【问题描述】:
我有一个数据框 (df1),其中包含每个样本中不同物种的丰度:
> SampleID Sp1 Sp2 Sp3 Sp4 ... Spn
> asb-001 3 0 0 23 9
> asb-002 4 15 10 56 98
> asb-003 8 45 8 453 0
> asb-004 0 5 0 3 6
> asb-005 120 56 0 0 0
...
每一列代表一个不同的物种。
我有另一个数据框 (df2)
Sp Fam
Sp1 Fam1
Sp2 Fam2
Sp3 Fam1
Sp4 Fam3
Sp5 Fam2
Sp6 Fam1
...
姓氏少于物种名称。
我想根据物种名称将列加在一起以获得家庭的总数(例如 Sp1 + Sp3 + Sp6 = Fam1)。我不想保留带有物种名称的原始列。
如果一切按计划进行,我的新数据框 (df3) 将如下所示:
> SampleID Fam1 Fam2 Fam3
> asb-001 12 0 9
> asb-002 14 18 112
> asb-003 28 58 18
> asb-004 10 12 10
> asb-005 142 65 0
...
我可以手动浏览并将单个物种添加在一起,但这对于大型数据集来说似乎很乏味,并且可能会产生错误。我有一种应该融化df1的感觉,但我对细节没有信心。任何意见,将不胜感激!
【问题讨论】:
-
您可能想要
gatherdf1,然后在Sp上进行左连接。从tidyr::gather(df1, key = 'Sp', value = 'value', 2:n) %>% dplyr::left_join(df1, df2, by = 'Sp')之类的内容开始。