基于因子级别将data.frame拆分为新的data.frames

基于因子级别将data.frame拆分为新的data.frames,r,dataframe,r-faq,R,Dataframe,R Faq,我正在尝试创建独立的data.frame对象,该对象基于因子的级别。因此,如果我有: df <- data.frame( x=rnorm(25), y=rnorm(25), g=rep(factor(LETTERS[1:5]), 5) ) df我认为split正是你想要的 请注意,X是一个数据帧列表,如str所示: X <- split(df, df$g) str(X) 编辑甚至比使用lappy分配给全局环境更好使用list2env: names(Y) <- c

我正在尝试创建独立的
data.frame
对象,该对象基于因子的级别。因此,如果我有:

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

df我认为
split
正是你想要的

请注意,X是一个数据帧列表,如
str
所示:

X <- split(df, df$g)
str(X)
编辑甚至比使用
lappy
分配给全局环境更好使用
list2env

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

names(Y)由于
dplyr 0.8.0
,我们还可以使用
group\u split
,其行为与
base::split

library(dplyr)
df %>% group_split(g)

#[[1]]
# A tibble: 5 x 3
#       x      y g    
#   <dbl>  <dbl> <fct>
#1 -1.21  -1.45  A    
#2  0.506  1.10  A    
#3 -0.477 -1.17  A    
#4 -0.110  1.45  A    
#5  0.134 -0.969 A    

#[[2]]
# A tibble: 5 x 3
#       x      y g    
#   <dbl>  <dbl> <fct>
#1  0.277  0.575 B    
#2 -0.575 -0.476 B    
#3 -0.998 -2.18  B    
#4 -0.511 -1.07  B    
#5 -0.491 -1.11  B  
#....
base::split
dplyr::group_split
之间的区别在于
group_split
没有根据分组来命名列表中的元素。所以

df1 <- df %>% group_split(g)
names(df1) #gives 
NULL
df1%组分割(g)
名称(df1)#给出
无效的
鉴于

df2 <- split(df, df$g)
names(df2) #gives
#[1] "A" "B" "C" "D" "E"

df2您能解释一下
split(df,df$g)
的错误吗?它返回一个
data.frame
s的列表,每个
g
的值对应一个。谢谢。这是将使用
split
创建的每个
data.frame
拆分成单独的对象,这是我遇到的困难。这正是我想要的。
df1 <- df %>% group_split(g)
names(df1) #gives 
NULL
df2 <- split(df, df$g)
names(df2) #gives
#[1] "A" "B" "C" "D" "E"
set.seed(1234)
df <- data.frame(
      x=rnorm(25),
      y=rnorm(25),
      g=rep(factor(LETTERS[1:5]), 5)
)