基于因子级别将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)
)