2017-09-01 55 views
0

我有一個很大的數據框(總共超過8,500,000個單元格),我需要根據特定列中的值創建此數據框的某些子集。是否可以爲主數據框的列中的每個值創建數據幀的子集?

我知道我可以手工創建子集,並且在只有少數值的情況下很高興做到這一點。目前,我得到的唯一值:

table(df$ColumnX) 

,然後從那裏建立個人dataframes因爲只有幾個值:

df.subset1 <- df[df$ColumnX == "Subset1", ] 
df.subset2 <- df[df$ColumnX == "Subset2", ] 
... 
df.subsetX <- df[df$ColumnX == "SubsetX", ] 

但是,當有顯著更獨特的價值觀是我在哪裏看到一個問題,這將需要我的計算機的處理能力,以及時實現我的目標。

我想知道的是如果這個過程可以自動化。

像這樣的東西是什麼,我希望能實現:

- List values in Column X 
- Create a new dataframe/subset for each value in Column X 

或者:

for(all unique values in Column X) 
    create a new dataframe 
end for 

因此,我有這樣的事情的基礎上ColumnX值:

df.subset1 
df.subset2 
... 
df.subsetX 
+0

只需使用'split'即'dflist < - 斯普利特(DF,DF $ ColumnX)'。這會給你一個data.frames列表我看到的 –

+0

。我該如何從列表中提取data.frames? – MusTheDataGuy

+0

如果你以'x < - split(iris,iris $ Species)'爲例,你可以使用'x $ setosa'或'x [[1]]或者x [[「setosa 「]]' –

回答

1

樣本數據集:

zz <- "A1 A2 A3 A4 A5 
Z Z 1 10 12 
E Y 10 12 8 
D X 2 12 15 
Z Z 1 10 12 
D X 2 14 16" 
df <- read.table(text=zz, header = TRUE) 

s1 <- split(df, df$A1) 
list2env(s1,envir=.GlobalEnv) 

列表獲取存儲作爲數據幀在您的環境

> D 
    A1 A2 A3 A4 A5 
3 D X 2 12 15 
5 D X 2 14 16 
> E 
    A1 A2 A3 A4 A5 
2 E Y 10 12 8 
> Z 
    A1 A2 A3 A4 A5 
1 Z Z 1 10 12 
4 Z Z 1 10 12 
0

我@docendo,在一般情況下,保持數據幀的列表是一般更有效的同意。

但備案的緣故,你也可以使用assign

list_index <- list(1:5, 6:8, 10:13) 

for(i in 1:length(list_index)){ # i <- 1 
    assign(paste0("df_", i), mtcars[list_index[i][[1]], ]) 
} 
相關問題