2017-03-12 25 views
0

重複するストア/製品の組み合わせのデータフレームがあります。重複した値を削除したいのですが、毎年これらの製品のコストを維持したいと考えています。重複は削除しますが、値を保持する

例のデータフレーム:

store product year1 year2 year3 
H&M  shirt  20.00 29.95 NA 
H&M  trousers 39.95 NA  39.95 
Mango trousers 49.95 NA  44.95 

私はdplyrを使用しましたが、これが唯一の代わりに、すべてのコスト値を維持する、重複を削除するように見えた:私は、データセットが見てみたいどのよう

store product year1 year2 year3 
H&M  shirt  20.00 29.95 NA 
Mango trousers 49.95 NA  NA 
H&M  trousers 39.95 NA  39.95 
Mango trousers NA  NA  44.95 

。どんな助けもありがとう!

再現可能なコード:

df <- data.frame(store= c("H&M", "Mango", "H&M", "Mango"), product=c("shirt", "trousers", "trousers", "trousers"), 
       year1=c(20.95, 49.95, 39.95, NA), year2=c(29.95, NA, NA, NA), year3=c(NA,NA,39.95, 44.95)) 

答えて

1

として次の行に実際dplyrが進むべき道であることを置き換えることができます。 まずgather()データ、そしてあなたgroup_by()summarize()、最終的spread()それ背中、不足している、つまりNASとの充填:

library(dplyr) 
df <- data.frame(store= c("H&M", "Mango", "H&M", "Mango"), 
       product=c("shirt", "trousers", "trousers", "trousers"), 
       year1=c(20.95, 49.95, 39.95, NA), 
       year2=c(29.95, NA, NA, NA), 
       year3=c(NA,NA,39.95, 44.95)) 
new.df <- df %>% 
    gather(year, value, -store, -product) %>% 
    group_by(year, store, product) %>% 
    summarize(sum.value = sum(value)) %>% 
    spread(key = year, value = sum.value, fill = NA) 

-store-productを使用して、これらの2つの変数を無視し、年によってデータを収集するためにgather()を伝えます新しい数値列 "value"を呼び出します(これは好きな名前で置き換えることができます)。

group_by()summarize()は、重複しないようにします(同じ店舗や商品に関連する行が多い場合は2つの値の合計を使用します)。

最終的にspread()は、探しているフォームを示します。

には重複をどのように扱い、どのように扱うかを覚えておいてください。この回答は、同じ商品と店舗を持つ2つの行が2回出現した場合、結果として必要な値はyear1、year2の合計、year3の合計であると仮定しています。 NASはgroup_by()グループの(存在する場合は、sumコマンドでna.rm = TRUE、すなわちを追加しない限り、あなたは、結果としてNAを取得します:。。summarize(sum.value = sum(value, na.rm = TRUE))その後、あなたの代わりに、NASの0を持つことになります

しかし、コードIあなたが指定した例のために提供された作品を使用して、あなたが望んでいたおしゃべりをもたらします。

1

あなたは dplyrパッケージを使用することができます。あなたはDFNを印刷するとき

dfn<- df %>% 
    group_by(store, product) %>% 
    summarise(year1 = sum(year1, na.rm = T), 
      year2 = sum(year2, na.rm = T), 
      year3 = sum(year3, na.rm = T)) 

、あなたは二つの変数によってグループに望んでいたので、group_by機能がそれに最も適している

store product year1 year2 year3 
    <fctr> <fctr> <dbl> <dbl> <dbl> 
1 H&M shirt 20.95 29.95 0.00 
2 H&M trousers 39.95 0.00 39.95 
3 Mango trousers 49.95 0.00 44.95 

を取得します。私はあなたが0であるところのためのNASにしたいことを知っている、とあなたは

dfn[dfn == 0, ] <- NA 
関連する問題