【发布时间】:2020-02-05 20:31:17
【问题描述】:
假设我有一个不同行数的数据框列表:
AB_df = data.frame(replicate(2,sample(0:130,201,rep=TRUE)))
BC_df = data.frame(replicate(2,sample(0:130,200,rep=TRUE)))
DE_df = data.frame(replicate(2,sample(0:130,197,rep=TRUE)))
FG_df = data.frame(replicate(2,sample(0:130,203,rep=TRUE)))
AB_pc = data.frame(replicate(2,sample(0:130,201,rep=TRUE)))
BC_pc = data.frame(replicate(2,sample(0:130,200,rep=TRUE)))
DE_pc = data.frame(replicate(2,sample(0:130,197,rep=TRUE)))
FG_pc = data.frame(replicate(2,sample(0:130,203,rep=TRUE)))
df_list = list(AB_df, BC_df, DE_df, FG_df, AB_pc, BC_pc, DE_pc, FG_pc)
names(df_list) = c("AB_df", "BC_df", "DE_df", "FG_df", "AB_pc", "BC_pc", "DE_pc", "FG_pc")
我想将嵌套的数据帧分成 n 个相等但随机的部分,以便我有例如对于 4 个 4 个 50 行的数据帧和 1 个 51 行的数据帧。在任何拆分的数据帧中,任何行都不应重复。
结构应该是:
List of 8
$ AB_df: list of 4
$ AB_df1: "data.frame": 50 obs. of 2 variables
..$ X1: int [1:50] 88 128....
..$ X2: int [1:50] 12 84 ....
$ AB_df2: "data.frame": 50 obs. of 2 variables
..$ X1: int [1:50] numbers...
..$ X2: int [1:50] numbers....
$ AB_df3: "data.frame": 50 obs. of 2 variables
..$ X1: int [1:50] numbers...
..$ X2: int [1:50] numbers....
$ AB_df4: "data.frame": 51 obs. of 2 variables
..$ X1: int [1:50] numbers...
..$ X2: int [1:50] numbers....
$ BC_df:'list of 4
$ BC_df1: "data.frame": 50 obs. of 2 variables
..$ X1: int [1:50] numbers...
..$ X2: int [1:50] numbers....
$ BC_df2: "data.frame": 50 obs. of 2 variables
..$ X1: int [1:50] numbers...
..$ X2: int [1:50] numbers....
............................
我发现了几个关于如何随机拆分数据框的主题,但这些主题都没有帮助我解决我的问题。
更新:由于某种原因,这只给了我 3 个拆分的数据帧。
set.seed(0L)
AB_df = data.frame(replicate(2,sample(0:130,1624,rep=TRUE)))
BC_df = data.frame(replicate(2,sample(0:130,1656,rep=TRUE)))
DE_df = data.frame(replicate(2,sample(0:130,1656,rep=TRUE)))
FG_df = data.frame(replicate(2,sample(0:130,1729,rep=TRUE)))
AB_pc = data.frame(replicate(2,sample(0:130,1624,rep=TRUE)))
BC_pc = data.frame(replicate(2,sample(0:130,1656,rep=TRUE)))
DE_pc = data.frame(replicate(2,sample(0:130,1656,rep=TRUE)))
FG_pc = data.frame(replicate(2,sample(0:130,1729,rep=TRUE)))
df_list = list(AB_df, BC_df, DE_df, FG_df, AB_pc, BC_pc, DE_pc, FG_pc)
names(df_list) = c("AB_df", "BC_df", "DE_df", "FG_df", "AB_pc", "BC_pc", "DE_pc", "FG_pc")
new = lapply(df_list, function(df) {
n <- nrow(df)
split(df, cut(sample(n), seq(1, n, by=floor(n/4)), labels=FALSE, include.lowest=TRUE))})
【问题讨论】:
-
不是关于实际问题,但仅供参考
purrr::lst完成您在list和names(df_list)行中所做的工作
标签: r list dataframe random sample