2012-03-15 35 views
35

我試圖根據一個因子的級別創建單獨的data.frame對象。所以,如果我有:將基於一個因子水平的數據幀拆分爲新數據。框架

df <- data.frame(
    x=rnorm(25), 
    y=rnorm(25), 
    g=rep(factor(LETTERS[1:5]), 5) 
) 

我怎麼可以拆分成df單獨data.frame S代表包含相應xyg每個級別?我可以通過使用split(df, df$g)獲得大部分途徑,但我希望每個級別的因素都有自己的data.frame。什麼是最好的方法來做到這一點?

謝謝。

+0

你能解釋一下什麼是錯的'分裂(DF,DF $ G)'?它返回'data.frame'的列表,每個'g'的值都有一個。 – 2012-03-15 03:00:28

回答

70

我認爲split正是你想要的。

注意,X爲數據幀的列表,所看到str

X <- split(df, df$g) 
str(X) 

如果你想與G團名個體對象,您可以X從split要素分配到這些名稱的對象,儘管這看起來像額外的工作,當你可以索引從列表split創建的列表中的數據幀。

#I used lapply just to drop the third column g which is no longer needed. 
Y <- lapply(seq_along(X), function(x) as.data.frame(X[[x]])[, 1:2]) 

#Assign the dataframes in the list Y to individual objects 
A <- Y[[1]] 
B <- Y[[2]] 
C <- Y[[3]] 
D <- Y[[4]] 
E <- Y[[5]] 

#Or use lapply with assign to assign each piece to an object all at once 
lapply(seq_along(Y), function(x) { 
    assign(c("A", "B", "C", "D", "E")[x], Y[[x]], envir=.GlobalEnv) 
    } 
) 

編輯或者不是使用lapply更好的分配給全球環境中使用list2env

names(Y) <- c("A", "B", "C", "D", "E") 
list2env(Y, envir = .GlobalEnv) 
A 
+0

謝謝。它是將每個'split.'用'split'分割成單獨的,獨立的對象,這些我都遇到了困難。這正是我所期待的。 – smillig 2012-03-15 10:47:33

相關問題