У меня есть датафрейм, подобный приведенному ниже.
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 ...