2016-07-08 7 views
1

私は過去12ヶ月の在庫データを持つデータフレームを持っています。私は私のデータセットに似ている3ヶ月間下の模擬データフレームを作成しました。 データフレームのトリッキーな再形成

inventory <- data.frame(ID=c(1,1,1,1,2,2,3,3,3,3,4,4,4), 
         SKU=c("375F","375F","375F","375F","QX51","QX51","AEC","AEC","AEC","AEC","115332H","115332H","115332H"), 
         inventory=c(3,4,14,5,18,5,4,13,4,10,3,2,2), 
         sold=c(3,2,0,1,4,0,0,3,1,5,0,2,1), 
         returned=c(1,0,2,0,0,0,1,0,1,1,0,2,0), 
         month=c(0,1,2,3,0,2,3,0,1,2,3,2,3)) 

は、私は以下の画像のように、自分のIDやSKUおよび各月のコラムで、各変数を表示するレポートを生成するために、データフレームを操作しようとしています。

私はdplyrとdata.tableライブラリを使用しようとしましたが、成功しませんでした。投稿した画像のように毎月の列を持つようにデータを変換するにはどうすればよいですか?私はまだRにはかなり新しいので、簡単に私に行ってください。ありがとう。

enter image description here

+1

質問に画像を含める必要があります。画像へのリンクを挿入することは、最終的にこれらのリンクが利用できなくなり、将来のユーザーはあなたの質問から恩恵を受けることができないため、悪い考えです。投稿を編集してこれを修正することができます。 – Andrej

+0

チップ、Andrejありがとう。更新しました。 –

+0

まだ、画像は使用しないでください。期待される結果を表示するにははるかに良い方法があります。 – Sotos

答えて

4

使用することができます。

# Creating the data frame 
inventory <- data.frame(ID=c(1,1,1,1,2,2,3,3,3,3,4,4,4), 
         SKU=c("375F","375F","375F","375F","QX51","QX51","AEC","AEC","AEC","AEC","115332H","115332H","115332H"), 
         inventory=c(3,4,14,5,18,5,4,13,4,10,3,2,2), sold=c(3,2,0,1,4,0,0,3,1,5,0,2,1), 
         returned=c(1,0,2,0,0,0,1,0,1,1,0,2,0), 
         month=c(0,1,2,3,0,2,3,0,1,2,1,2,3)) 

# Reshaping the data 
    # Melting the data frame 
    inv2 <- melt(inventory,id=c("ID","SKU","month")) 
    # Reshaping 
    inv2_wide <- reshape(inv2,v.names = "value",idvar = c("ID","SKU","variable"), 
         timevar = "month", direction = "wide") 

# Ordering by ID variables 
inv2_wide <- inv2_wide[order(inv2_wide$ID,inv2_wide$SKU),] 

# Renaming the variables 
names(inv2_wide) <- gsub("value\\.","Month",names(inv2_wide)) 


    ID  SKU variable Month0 Month1 Month2 Month3 
1 1 375F inventory  3  4  14  5 
14 1 375F  sold  3  2  0  1 
27 1 375F returned  1  0  2  0 
5 2 QX51 inventory  18  NA  5  NA 
18 2 QX51  sold  4  NA  0  NA 
31 2 QX51 returned  0  NA  0  NA 
7 3  AEC inventory  13  4  10  4 
20 3  AEC  sold  3  1  5  0 
33 3  AEC returned  0  1  1  1 
11 4 115332H inventory  NA  3  2  2 
24 4 115332H  sold  NA  0  2  1 
37 4 115332H returned  NA  0  2  0 
1

我々はので、私は重複を削除するために値を変更しなければならなかったID = 4 and SKU = 115332Hための重複がありtidyr

library(dplyr) 
library(tidyr) 
gather(inventory, Variable,value, inventory:returned) %>% #reshape to long 
     mutate(month = paste0("Month", month)) %>% #concat with "Month" string 
     spread(month, value)#reshape to wide 
# ID  SKU Variable Month0 Month1 Month2 Month3 
#1 1 375F inventory  3  4  14  5 
#2 1 375F returned  1  0  2  0 
#3 1 375F  sold  3  2  0  1 
#4 2 QX51 inventory  18  NA  5  NA 
#5 2 QX51 returned  0  NA  0  NA 
#6 2 QX51  sold  4  NA  0  NA 
#7 3  AEC inventory  13  4  10  4 
#8 3  AEC returned  0  1  1  1 
#9 3  AEC  sold  3  1  5  0 
#10 4 115332H inventory  NA  3  2  2 
#11 4 115332H returned  NA  0  2  0 
#12 4 115332H  sold  NA  0  2  1 
関連する問題