2017-04-13 65 views
1

對於第一個不起眼的帖子道歉,這是我第一次在這裏。我修改了它,我希望現在更容易理解。將數據從長格式轉換爲具有五個不同度量列的寬格式

我一直在嘗試從長到寬的格式重塑幾個大型數據集,然後使用通用標識符將它們合併在一起。

該數據是漁業數據。目前,我需要將目標捕獲數據從long轉換爲wide,並追加到已格式化的數據集,以將每行作爲單個「TripSet」值,這是我的數據集中的通用標識符。

數據集的格式,我需要從長並轉換爲寬如下:

my.df <- data.frame(Trip=rep(c("A","B","C"), 5), Set=rep(1:5, each=3), CommonName=rep 
(c("i","j","k"),5),TotCat=1:15, Kept=16:30, RtnAlive=31:45, RtnDead= 46:60, RtnUnk= 61:75) 

my.df$TripSet <- paste(my.df$Trip,my.df$Set) 

my.df 
    Trip Set CommonName TotCat Kept RtnAlive RtnDead RtnUnk TripSet 
1  A 1   i  1 16  31  46  61  A 1 
2  B 1   j  2 17  32  47  62  B 1 
3  C 1   k  3 18  33  48  63  C 1 
4  A 2   i  4 19  34  49  64  A 2 
5  B 2   j  5 20  35  50  65  B 2 
6  C 2   k  6 21  36  51  66  C 2 
7  A 3   i  7 22  37  52  67  A 3 
8  B 3   j  8 23  38  53  68  B 3 
9  C 3   k  9 24  39  54  69  C 3 
10 A 4   i  10 25  40  55  70  A 4 
11 B 4   j  11 26  41  56  71  B 4 
12 C 4   k  12 27  42  57  72  C 4 
13 A 5   i  13 28  43  58  73  A 5 
14 B 5   j  14 29  44  59  74  B 5 
15 C 5   k  15 30  45  60  75  C 5 

我可以用鑄造或dcast從長到寬轉換一個變量,如下所示:

​​

但是我不確定是否應該在這裏獲得如此多的NA值而不是零值。

我想要的數據格式是具有通用標識符'TripSet by row,然後在列中每個物種的通用名稱與'TotCat','保留','RtnAlive','RtnDead','RtnUnk'匹配。

我試圖熔化重鑄,然後將數據如下:

dcast(melt(my.df, id.vars=c("TripSet", "CommonName")), TripSet~variable+CommonName) 

    TripSet Trip_i Trip_j Trip_k Set_i Set_j Set_k TotCat_i TotCat_j TotCat_k Kept_i Kept_j Kept_k RtnAlive_i RtnAlive_j RtnAlive_k RtnDead_i 
1  A 1  A <NA> <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
2  A 2  A <NA> <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
3  A 3  A <NA> <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
4  A 4  A <NA> <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
5  A 5  A <NA> <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
6  B 1 <NA>  B <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
7  B 2 <NA>  B <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
8  B 3 <NA>  B <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
9  B 4 <NA>  B <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
10  B 5 <NA>  B <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
11  C 1 <NA> <NA>  C <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
12  C 2 <NA> <NA>  C <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
13  C 3 <NA> <NA>  C <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
14  C 4 <NA> <NA>  C <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 
15  C 5 <NA> <NA>  C <NA> <NA> <NA>  <NA>  <NA>  <NA> <NA> <NA> <NA>  <NA>  <NA>  <NA>  <NA> 

這主要是我的期望輸出,但我不希望投「跳閘」和「設置」(和其他幾個列變量我有在實際數據集中),而只是將'保留','RtnAlive','RtnDead','RtnUnk'作爲附加度量變量,並且列名反映所選度量變量名稱和CommonName。

另外,NA值是在沒有數據的情況下產生的,例如,沒有共同名稱i物種被保留或在x數組上沒有保留?

任何幫助,這將不勝感激。

+0

請提供一個可重現的例子來說明您的問題並幫助我們解決您的問題。 http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example –

+0

也添加您的預期輸出。 – Sotos

+0

是的 - 新生對於缺失的組合,但我的結果不同 - 請參閱下面的答案。 – epi99

回答

0
library(dplyr) 
library(reshape2) 
my.df %>% 
    melt(id.vars = c("Trip", "Set", "CommonName")) %>%  # make tall 
    dcast(Trip + Set ~ variable + CommonName)    # make wide 

# Trip Set TotCat_i TotCat_j TotCat_k Kept_i Kept_j Kept_k RtnAlive_i RtnAlive_j RtnAlive_k RtnDead_i 
# 1  A 1  1  NA  NA  16  NA  NA   31   NA   NA  46 
# 2  A 2  4  NA  NA  19  NA  NA   34   NA   NA  49 
# 3  A 3  7  NA  NA  22  NA  NA   37   NA   NA  52 
# 4  A 4  10  NA  NA  25  NA  NA   40   NA   NA  55 
# 5  A 5  13  NA  NA  28  NA  NA   43   NA   NA  58 
# 6  B 1  NA  2  NA  NA  17  NA   NA   32   NA  NA 
# 7  B 2  NA  5  NA  NA  20  NA   NA   35   NA  NA 
# 8  B 3  NA  8  NA  NA  23  NA   NA   38   NA  NA 
# 9  B 4  NA  11  NA  NA  26  NA   NA   41   NA  NA 
# 10 B 5  NA  14  NA  NA  29  NA   NA   44   NA  NA 
# 11 C 1  NA  NA  3  NA  NA  18   NA   NA   33  NA 
# 12 C 2  NA  NA  6  NA  NA  21   NA   NA   36  NA 
# 13 C 3  NA  NA  9  NA  NA  24   NA   NA   39  NA 
# 14 C 4  NA  NA  12  NA  NA  27   NA   NA   42  NA 
# 15 C 5  NA  NA  15  NA  NA  30   NA   NA   45  NA 
+0

嗨epi99,非常感謝您的幫助。這是我期望的輸出。一個問題解決問題。當我運行剛剛發佈的上述代碼時,出現以下錯誤消息:select(。,-Trip,Set)中的錯誤:未使用的參數(-Trip,Set) –

+0

我只是簡化了它..使用'id.vars'熔化參數選擇列 – epi99

+0

謝謝。我有一個問題,是否可以使用dplyr進行重塑,以便所有列按照總捕獲的通用名稱按每個物種的順序排列,然後按通用名稱保存每個物種等等,而不是物種1的總數抓住,保持,rtndead,rtnalive等... –

相關問題