2016-03-06 165 views
1

我有以下的數據幀稱爲groceriesR:如何按組分組數據框?

Region Item Barcode Version 
East  Cereal BM  2.1 
North Bagel  EP  2.0 
East  Pizza  BM  2.3 
West  Taco  EP  2.2 
West  Apple  BM  3.0 
South Orange EP  3.2 
North Tomato EP  2.2 
South Grape  EP  2.0 
East  Pineapple EP  3.2 
North Cake  BM  2.0 

如何子組條形碼,版本數據幀得到以下數據幀?

數據幀

Region Item Barcode Version 
East  Cereal BM  2.1 
East  Pizza  BM  2.3 
North Cake  BM  2.0 

數據幀

Region Item Barcode Version 
West  Apple  BM  3.0 

數據幀

Region Item Barcode Version 
North Bagel  EP  2.0 
North Tomato EP  2.2 
South Grape  EP  2.0 
West  Taco  EP  2.2 

數據幀

Region Item Barcode Version 
South Orange EP  3.2 
East  Pineapple EP  3.2 

正如你所看到的,我試圖通過條碼和版本來對原始數據框進行子集化(作爲整數;所以2.0,2.1,2.3都被認爲是2等)。

這是我到目前爲止有:

subset(groceries, Barcode=="BM" & Version==2.0 | Version==2.1 | Version==2.3) 

正如你能想象這是不理想的。有沒有一種方法可以得到BarcodeVersion(作爲整數)的不同因子的矢量?如果我可以將這兩個作爲一個向量,那麼我可以創建一個for循環來自動執行上面這行代碼來創建這4個數據幀。

回答

2
split(df, interaction(df$Barcode, floor(df$Version))) 
# $BM.2 
# Region Item Barcode Version 
# 1 East Cereal  BM  2.1 
# 3 East Pizza  BM  2.3 
# 10 North Cake  BM  2.0 
# 
# $EP.2 
# Region Item Barcode Version 
# 2 North Bagel  EP  2.0 
# 4 West Taco  EP  2.2 
# 7 North Tomato  EP  2.2 
# 8 South Grape  EP  2.0 
# 
# $BM.3 
# Region Item Barcode Version 
# 5 West Apple  BM  3 
# 
# $EP.3 
# Region  Item Barcode Version 
# 6 South Orange  EP  3.2 
# 9 East Pineapple  EP  3.2 
+0

謝謝!這正是我所期待的。如何將不同的數據框自動分配到單獨的變量中?真實的數據有很多這樣的內部子集。我怎麼把它們拉出來而不必做:'例如,split(df,interaction(df $條形碼,floor(df $版本)))$ EP.3'? – cooldood3490

+1

@ cooldood3490,這樣做不是一個好主意,尤其是有很多子集;使用列表更實用。您希望如何調用這些數據框?也許運行'aux < - interaction(df $ Barcode,floor(df $ Version)); ml < - split(df,aux)'然後使用ml [[aux [1]]]','ml [[aux [2]]]也很好嗎?或者當然是ml [[1]],'ml [[2]]'。 – Julius