重新考虑构建单独的数据框来淹没您的全球环境,并使用assign 这样做。相反,构建 两个 数据帧列表来保存结构相似的 10 个数据帧。对于控制/训练拆分,在组变量上使用split,反之则使用by。
# RESET ROW NAMES IF NOT NEEDED
row.names(dd) <- NULL
# CREATE A GROUP COLUMN (MULTIPLES OF 100: df_0, df_100 ... df_900)
dd$grp <- paste0("df_", as.integer((as.integer(row.names(dd))-1) / 100) * 100)
# NAMED LIST OF df_0, df_100 ... df_900 (EACH NROWS = 100)
control_dflist <- split(dd, dd$grp) # OR by(dd, dd$grp, identity)
# NAMED LIST OF df_0, df_100 ... df_900 (EACH NROWS = 900)
training_dflist <- by(dd, dd$grp, function(sub) subset(dd, grp!= max(sub$grp)))
请注意:如果数据框位于命名列表而不是单独的对象中,则不会丢失数据框的功能。
head(control_dflist$df_0) # 1ST CONTROL DF
summary(control_dflist$df_100) # 2ND CONTROL DF
tail(control_dflist$df_200) # 3RD CONTROL DF
关于随机数据的演示:
set.seed(6222018)
dd <- data.frame(
ID = replicate(1000, sample(seq(15), 1, replace=TRUE)),
TOOL = replicate(1000, sample(c("julia","r","pandas","spss","stata","sas"), 1, replace=TRUE)),
NUM = rnorm(1000)*100
)
control_dflist <- by(dd, dd$grp, identity)
training_dflist <- by(dd, dd$grp, function(sub) subset(dd, grp!= max(sub$grp)))
输出 (显示编号和命名的引用;保留行名以供说明)
head(control_dflist[[1]])
# ID TOOL NUM grp
# 1 4 sas 80.44873 df_0
# 2 5 r -204.50714 df_0
# 3 2 spss -111.54602 df_0
# 4 8 julia -145.48614 df_0
# 5 2 sas 103.82625 df_0
# 6 6 spss -58.82708 df_0
head(training_dflist[[1]])
# ID TOOL NUM grp
# 101 10 sas -19.82463 df_100
# 102 4 spss 78.58277 df_100
# 103 2 stata 26.53858 df_100
# 104 13 sas 190.65434 df_100
# 105 1 r 36.96777 df_100
# 106 12 r 133.77021 df_100
tail(control_dflist$df_0)
# ID TOOL NUM grp
# 95 3 stata 13.446515 df_0
# 96 3 spss 171.488068 df_0
# 97 11 sas 48.573506 df_0
# 98 10 r -132.522866 df_0
# 99 12 stata -155.558407 df_0
# 100 2 stata 7.590873 df_0
tail(training_dflist$df_0)
# ID TOOL NUM grp
# 995 3 spss 92.613934 df_900
# 996 11 spss 13.389638 df_900
# 997 15 julia -147.108295 df_900
# 998 3 stata 91.032385 df_900
# 999 4 sas -21.505796 df_900
# 1000 15 sas -9.771332 df_900