【发布时间】:2020-02-12 03:27:41
【问题描述】:
我有一个如下所示的数据框。
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)))
df_list = list(AB_df, BC_df, DE_df, FG_df)
names(df_list) = c("AB_df", "BC_df", "DE_df", "FG_df")
set.seed(5)
subs <- 4
df_list = lapply(df_list,
function(df){
idx <- gl(n = subs,round(nrow(df)/subs))
split(df, sample(idx))})
for (a in 1:length(df_list)) {
names(df_list[[a]]) = c(paste0("S", seq(1:4)))}
它由嵌套列表"AB_df", "BC_df", "DE_df", "FG_df" 组成。这些嵌套列表中的每一个都包含 4 个样本(S1、S2、S3 和 S4)。
我现在想重新绑定这些样本,但总是留下其中一个。所以对于df_list$AC_df,我想要有4个数据帧,称为"S1_S2_S3", "S1_S2_S4", "S1_S3_S4", "S2_S3_S4"。因此,我不想将每个子样本都放在自己的数据框中,而是想以所有可能的方式组合其中的 3 个。 "S1_S2_S3" 应该包含df_list$AC_df$S1, df_list$AC_df$S2, df_list$AC and df$S3, 的数据,而不是df_list$AC_df$S4. 的数据
我尝试创建每个 df 名称的列表,并希望遍历它们...但我不确定这是一个好主意:
level1 = paste("df_list", names(df_list), sep = "$")
samples = c(paste0("S", seq(1:4)))
df_names = paste(rep(level1, each = length(samples)), samples, sep = "$")
idx = c(1:4)
df_names = list (AB = df_names[idx], CD = df_names[idx+4], EF = df_names[idx+8], GH = df_names[idx+12])
更新:
我想我已经接近解决方案,但它仍然无法正常工作。我试过这个:
save = list()
for (a in 1:length(df_list)) {
for (b in 1:length(df_list[[a]])) {
print (b)
save[[b]] = df_list[[a]][-b]}}
这至少可以帮助我删除不需要的数据框。但是循环只保存最后一个 FG_df 的结果...
【问题讨论】:
-
有什么特别的原因说明
df_list中的每个数据帧必须超过 1500 行而不是 5-10 行? -
对不起,我当然可以选择更小的数字,但在我的真实数据中是这样的 1:1。
-
对
FG_df使用 1728(4 的倍数)而不是 1729,您的代码不会发出警告。