如何重塑两个数据集以进行合并?

时间:2016-02-22 00:23:38

标签: r merge

我正在寻找如何合并两个长度不等的数据集来在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

1 个答案:

答案 0 :(得分:0)

以下代码假设我们想要加入sp(种类)的每个数据集。所以我们做了以下事情:

  1. 对于trait,请将行名称添加为新sp列,我们将其用作left_join的列。

  2. left_join trait abun sp。为此,我们首先需要转置abunas.data.frame(t(abun)))的行和列,然后将行名称添加为新的sp列。

  3. 结果如下:

    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