根据一个因素的级别将data.frame分解成新的data.frames
我试图根据一个因素的水平创build单独的data.frame
对象。 所以如果我有:
df <- data.frame( x=rnorm(25), y=rnorm(25), g=rep(factor(LETTERS[1:5]), 5) )
我怎样才能将df
拆分为包含相应的x
和y
值的每个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