2016-03-06 2 views
1

У меня есть следующие кадр данных называется groceries:R: Как подмножить dataframe по группам?

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) 

Как вы можете себе представить, что это не идеал. Есть ли способ, которым я могу получить векторы разных факторов для Barcode и Version (как целые числа)? Если я могу получить эти два в качестве векторов, то я, возможно, создаю цикл 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, взаимодействие (df $ Barcode, floor (df $ Version))) $ EP.3' например? – cooldood3490

+1

@ cooldood3490, делая это не очень хорошая идея, особенно имея множество подмножеств; использование списка более практично. Как вы хотели бы назвать эти фреймы данных? Возможно, выполняется 'aux <- взаимодействие (df $ Barcode, floor (df $ Version)); ml <- split (df, aux) ', а затем с использованием' ml [[aux [1]]] ',' ml [[aux [2]]] 'также отлично? Или, конечно, 'ml [[1]]', 'ml [[2]]'. – Julius

Смежные вопросы