2017-10-25 16 views
2

私は、異なる製品の購入および販売価格に関する情報を含むデータセットを持っています。しかし、買収され売却された価格を同じ行に格納するのではなく、買収され売却された変数によって識別される2つの別々の行に格納されます(下図参照)。私はそれがこのような少し何かに見えるので、1行に売買価格に参加したい2つの識別子を2つの識別子に基づいて1つにマージする

Product|Product Type|Price|Bought|Sold 
--------------------------------------- 
Apples | Green | 1 | 0 | 1 
--------------------------------------- 
Apples | Green | 2 | 1 | 0 
--------------------------------------- 
Apples | Red  | 3 | 0 | 1 
--------------------------------------- 
Apples | Red  | 4 | 1 | 0 
--------------------------------------- 

:ここ

Product|Product Type|Bought Price|Sold Price 
--------------------------------------------- 
Apples | Green |  1  | 2 
--------------------------------------------- 
Apples | Red  |  4  | 3 

は私の例のデータセットを作成するためのコードです。助けを前にありがとう。

Product <- c("Apples", "Apples", "Apples", "Apples", "Apples", "Apples", 
      "Oranges", "Oranges", "Oranges", "Oranges", "Oranges", "Oranges", 
      "Buscuits", "Buscuits", "Buscuits", "Buscuits", "Buscuits", "Buscuits") 
ProductType <- c("Green", "Green", "Red", "Red", "Pink", "Pink", 
       "Big", "Big", "Medium", "Medium", "Small", "Small", 
       "Chocolate", "Chocolate", "Oat", "Oat", "Digestive", "Digestive") 


Price <- c(2, 1, 3, 4, 1, 2, 
      5, 3, 2, 1, 2, 3, 
      6, 4, 1, 8, 6, 2) 

Bought <- c(0, 1, 0, 1, 0, 1, 
      0, 1, 0, 1, 0, 1, 
      0, 1, 0, 1, 0, 1) 

Sold <- c(1, 0, 1, 0, 1, 0, 
      1, 0, 1, 0, 1, 0, 
      1, 0, 1, 0, 1, 0) 

sales <- data.frame(Product, ProductType, Price, Bought, Sold) 
+0

は/購入数量のcooleanはい/いいえまたは指示を販売1であるだろうか? – User632716

+0

'sales%>%group_by(Product、ProductType)%>%summarize(BoughtPrice = Price [Bought == 1]、SoldPrice = Price [Sold == 1])' – akrun

答えて

4

dplyr使用:

library(dplyr) 

sales %>% 
    group_by(Product, ProductType) %>% 
    summarise(BoughtPrice = Price[ Bought == 1 ], 
      SoldPrice = Price[ Sold == 1 ]) %>% 
    ungroup() 
2

'製品'、 'でProductType' によって、私たちのグループ、dplyrでとsummarise '価格' 'をサブセット化によって 'BoughtPrice' と 'SoldPrice' を作成します販売購入」または '1

library(dplyr) 
sales %>% 
    group_by(Product, ProductType) %>% 
    summarise(BoughtPrice = Price[Bought==1], SoldPrice = Price[Sold ==1]) 

と同様のアプローチ図10は、

library(data.table) 
setDT(sales)[, lapply(.SD, function(x) Price[x==1]), 
        .(Product, ProductType), .SDcols = Bought:Sold] 
+1

これは完璧に機能しました。ありがとうございました:) –

3
library(dplyr) 
df <- data.frame(Product, ProductType, Price, Bought, Sold) 
df %>% group_by(Product, ProductType) %>% 
    summarise(Bought_Price = sum(Price * Bought), 
      Sold_Price = sum(Sold * Price)) 

# A tibble: 9 x 4 
# Groups: Product [?] 
# Product ProductType Bought_Price Sold_Price 
# <fctr>  <fctr>  <dbl>  <dbl> 
# 1 Apples  Green   1   2 
# 2 Apples  Pink   2   1 
# 3 Apples   Red   4   3 
# 4 Buscuits Chocolate   4   6 
# 5 Buscuits Digestive   2   6 
# 6 Buscuits   Oat   8   1 
# 7 Oranges   Big   3   5 
# 8 Oranges  Medium   1   2 
# 9 Oranges  Small   3   2 
+1

もう1人が少し違う解決策を提案しました。これはいいです:)回答ありがとうございました –

+0

私が実際に投稿したときに2つの解決策があることは実際には分かりませんでした。私は彼らがかなり同じであると思います:) – Suren

関連する問題