我正在寻找如何合并两个长度不等的数据集来在FD包中运行分析。该软件包给出了一个包含8种物种的两个数据集的示例,如下图所示:
# dummy dataset
dummy.dist <- gowdis(dummy$trait)
ex1 <- fdisp(dummy.dist, dummy$abun)
ex1
$trait
num1 num2 fac1 fac2 ord1 ord2 bin1 bin2
sp1 9.0 4.5 A X 3 2 0 1
sp2 8.1 6.0 A Z <NA> 1 0 1
sp3 NA 2.3 C Y 5 3 1 1
sp4 3.2 5.4 B Z 1 7 0 0
sp5 5.8 1.2 C X 2 6 NA 0
sp6 3.4 8.5 C Y 2 1 1 1
sp7 7.5 2.1 B X 3 2 1 0
sp8 4.3 6.5 <NA> Z 1 3 0 1
$abun
sp1 sp2 sp3 sp4 sp5 sp6 sp7 sp8
com1 1 1 0 0 4 2 0 0
com2 0 0 0 2 1 0 0 5
com3 2 0 0 0 0 1 0 3
com4 1 0 7 0 0 0 0 0
com5 0 0 2 3 3 0 0 0
com6 0 3 0 0 5 6 1 6
com7 3 5 0 3 0 0 0 0
com8 0 0 0 0 6 2 1 2
com9 4 1 1 3 0 0 2 0
com10 0 4 1 0 0 0 6 1
如何合并我的两个数据集以执行上述相同的分析?有人可以帮我这个吗?
> trait
SVL habit habitat RM
Dan 3.900000 A O C
Dbe 2.450000 A O D
Dbi 2.437294 A O C
Del 2.701777 A O C
Dme 1.973750 A O C
Dmi 2.196400 A O C
Dse 3.453947 A O C
Hal 4.801000 A O C
Hfa 9.562623 A F E
Hse 4.300000 A F C
Lfu 4.576042 T O F
Lla 9.502564 T O G
Lsp 4.482500 T O F
Pbu 6.500000 A F D
Pro 4.085714 A F D
Psi 2.561875 T F G
Ric 8.600000 T F C
Ror 6.750000 T F C
Sal 2.644000 A O C
Scu 2.712083 A O C
Sxs 4.245474 A O C
Tme 6.869167 A F C
Tni 10.000000 A O C
> abun
Dan Dbe Dbi Del Dme Dmi Dse Hal Hfa Hse Lfu Lla Lsp Pbu Pro Psi Ric Ror Sal Scu Sxs Tme
P1 0 0 114 223 1 21 0 2 56 2 0 11 0 1 0 1 0 3 0 19 6 0
P2 0 0 32 3 0 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 9 0
P3 0 0 9 0 0 0 0 0 0 0 13 6 0 0 0 0 0 0 0 0 0 0
P4 0 0 5 0 0 0 1 0 0 0 1 3 2 0 0 0 0 0 0 0 3 0
P5 0 0 10 17 0 3 15 0 0 0 2 5 0 0 0 0 0 0 0 0 8 0
P6 0 0 1 0 0 0 0 0 0 0 4 12 0 0 0 6 0 0 0 0 0 0
P7 0 0 15 4 3 0 3 2 0 0 0 0 0 0 0 0 1 0 0 1 10 0
P8 0 0 85 31 0 0 15 9 1 0 14 13 1 0 0 6 0 0 0 0 34 0
P9 0 0 6 0 0 1 22 0 0 0 1 7 5 0 0 1 0 0 0 3 12 3
P10 1 1 176 159 0 25 8 4 4 0 0 13 2 0 0 0 0 1 0 1 37 10
P11 0 0 22 3 4 0 11 0 1 0 15 62 4 0 7 2 0 0 5 0 18 2
答案 0 :(得分:0)
以下代码假设我们想要加入sp
(种类)的每个数据集。所以我们做了以下事情:
对于trait
,请将行名称添加为新sp
列,我们将其用作left_join
的列。
left_join
trait
abun
sp
。为此,我们首先需要转置abun
(as.data.frame(t(abun))
)的行和列,然后将行名称添加为新的sp
列。
结果如下:
library(dplyr)
dat = trait %>% add_rownames("sp") %>%
left_join(as.data.frame(t(abun)) %>% add_rownames("sp") , by="sp", all=TRUE)
dat %>% as.data.frame
sp num1 num2 fac1 fac2 ord1 ord2 bin1 bin2 com1 com2 com3 com4 com5 com6 com7 com8 com9 com10
1 sp1 9.0 4.5 A X 3 2 0 1 1 0 2 1 0 0 3 0 4 0
2 sp2 8.1 6.0 A Z <NA> 1 0 1 1 0 0 0 0 3 5 0 1 4
3 sp3 NA 2.3 C Y 5 3 1 1 0 0 0 7 2 0 0 0 1 1
4 sp4 3.2 5.4 B Z 1 7 0 0 0 2 0 0 3 0 3 0 3 0
5 sp5 5.8 1.2 C X 2 6 NA 0 4 1 0 0 3 5 0 6 0 0
6 sp6 3.4 8.5 C Y 2 1 1 1 2 0 1 0 0 6 0 2 0 0
7 sp7 7.5 2.1 B X 3 2 1 0 0 0 0 0 0 1 0 1 2 6
8 sp8 4.3 6.5 <NA> Z 1 3 0 1 0 5 3 0 0 6 0 2 0 1