2016-02-22 17 views
0

我正在尋找如何合併兩個不等長的數據集來運行包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

下面的代碼假設我們想通過sp(物種)加入每個數據集。因此,我們做到以下幾點:

  1. 對於trait,加上該行的名稱作爲新sp列,我們將作爲left_join列使用。

  2. left_jointraitabun通過sp。爲此,我們首先需要轉置abunas.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 
+0

感謝您的幫助,但我仍然有一個疑問。在包FD(「虛擬」)中給出的示例中,在數據集$ trait中,物種在行中,在數據集$ abun中,它們在列中。我可以調換我的數據集「abun」的行和列,並以同樣的方式運行分析嗎?我嘗試運行您提供的腳本併發生以下問題:> dat = trait%>%add_rownames(「sp」)%>% + left_join(as.data.frame(t(abun))%>%add_rownames( 「sp」),by =「sp」,all = TRUE) eval(expr,envir,enclos)中的錯誤: 找不到函數「add_rownames」 – Mauricio

+0

您是否首先加載'dplyr'包? – eipi10

+0

是的,我做到了。我試圖找出一個解決方案,但我不知道如何。 – Mauricio