2015-03-13 98 views
0

我正在嘗試在不同的data.frames中自動爲一個大的data.frames子集。我有類似:使用列值的新數據框中的子集數據幀

Type1 Type2 Type3 Info1 Info2 Info3 
A  1  Z  a  a  a  
A  2  Y  b  b  b 
B  4  X  c  c  c 
A  1  Z  d  d  d 

我想創建爲每個類型3>類型2>的Type1

第一數據幀(A1Z)不同的數據幀:

Type1 Type2 Type3 Info1 Info2 Info3 
A  1  Z  a  a  a  
A  1  Z  d  d  d 

第二數據幀(A2Y ):

Type1 Type2 Type3 Info1 Info2 Info3 
A  2  Y  b  b  b  

...

達到這個目標的最快方法是什麼?謝謝!!

+0

以這種方式拆分不應該是必要的,我估計,除非你要將它們保存到單獨的文件。 – Frank 2015-03-13 19:02:45

回答

4

您可以使用split生產data.frames列表:

> split(df, do.call(paste0, df[,1:3])) 
$A1Z 
    Type1 Type2 Type3 Info1 Info2 Info3 
1  A  1  Z  a  a  a 
4  A  1  Z  d  d  d 

$A2Y 
    Type1 Type2 Type3 Info1 Info2 Info3 
2  A  2  Y  b  b  b 

$B4X 
    Type1 Type2 Type3 Info1 Info2 Info3 
3  B  4  X  c  c  c 

它通常建議將相關的數據結構(如data.frames)在一個單一的對象(如在這種情況下的列表) 。如果要將這些數據幀分配給全球環境,您可以調查?list2env。正如弗蘭克在評論中指出的那樣,這樣的分裂可能不是必要的(儘管我們不能確定沒有更多的信息)。使用dplyr,您可以使用group_by按這些TypeX列對數據進行分組,然後對每個組執行一些操作。你會開始是這樣的:

library(dplyr) 
df %>% 
    group_by(Type1, Type2, Type3) %>% 
# ... more manipulations... 

#Source: local data frame [4 x 6] 
#Groups: Type1, Type2, Type3 
# 
# Type1 Type2 Type3 Info1 Info2 Info3 
#1  A  1  Z  a  a  a 
#2  A  2  Y  b  b  b 
#3  B  4  X  c  c  c 
#4  A  1  Z  d  d  d