根据一个因素的级别将data.frame分解成新的data.frames

我试图根据一个因素的水平创build单独的data.frame对象。 所以如果我有:

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

我怎样才能将df拆分为包含相应的xy值的每个g级别的单独data.frame s? 我可以使用split(df, df$g)获得大部分的方法,但是我希望每个级别的因子都有自己的data.frame 。 什么是最好的方法来做到这一点?

谢谢。

我认为split确实是你想要的。

请注意,X是一个数据框的列表,如str

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

如果你想单独使用组名g的名字,你可以将x的元素从split给这些名字的对象,尽pipe这样看起来像是额外的工作,但是你可以从列表split创build索引数据框。

 #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