R自动Rbind列表中的多个df
R Automatically Rbind multiple df in list
我有一个如下所示的数据框。
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)。
我现在想 rbind 这些样本,但总是遗漏其中一个。因此,对于 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...
的结果
考虑使用 combn
呈现三个的所有组合,然后 运行 嵌套 lapply
以连接所需的示例数据帧:
sample_combos <- combn(paste0("S", c(1:4)), 3, simplify=FALSE)
sample_df_list <- lapply(sample_combos, function(s)
lapply(df_list, function(lst) do.call(rbind, lst[s]))
)
names(sample_df_list) <- lapply(sample_combos, function(s) paste(s, collapse="_"))
或者,combn
有一个函数参数:
# UNNAMED LIST OF DFs
sample_combos <- combn(paste0("S", c(1:4)), 3, function(s)
lapply(df_list, function(lst) do.call(rbind, lst[s])),
simplify = FALSE
)
输出
sample_combos
# List of 4
# $ S1_S2_S3:List of 4
# ..$ AB_df:'data.frame': 1218 obs. of 2 variables:
# .. ..$ X1: int [1:1218] 117 118 82 100 27 85 16 50 63 64 ...
# .. ..$ X2: int [1:1218] 12 122 103 90 45 69 34 7 129 10 ...
# ..$ BC_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 69 47 48 53 11 0 55 101 128 112 ...
# .. ..$ X2: int [1:1242] 35 96 18 75 103 98 118 27 37 122 ...
# ..$ DE_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 115 67 53 40 118 114 75 127 42 32 ...
# .. ..$ X2: int [1:1242] 117 25 101 106 12 73 88 92 65 5 ...
# ..$ FG_df:'data.frame': 1297 obs. of 2 variables:
# .. ..$ X1: int [1:1297] 125 32 83 12 120 44 11 22 63 26 ...
# .. ..$ X2: int [1:1297] 43 30 78 53 102 103 121 111 27 100 ...
# $ S1_S2_S4:List of 4
# ..$ AB_df:'data.frame': 1218 obs. of 2 variables:
# .. ..$ X1: int [1:1218] 117 118 82 100 27 85 16 50 63 64 ...
# .. ..$ X2: int [1:1218] 12 122 103 90 45 69 34 7 129 10 ...
# ..$ BC_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 69 47 48 53 11 0 55 101 128 112 ...
# .. ..$ X2: int [1:1242] 35 96 18 75 103 98 118 27 37 122 ...
# ..$ DE_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 115 67 53 40 118 114 75 127 42 32 ...
# .. ..$ X2: int [1:1242] 117 25 101 106 12 73 88 92 65 5 ...
# ..$ FG_df:'data.frame': 1297 obs. of 2 variables:
# .. ..$ X1: int [1:1297] 125 32 83 12 120 44 11 22 63 26 ...
# .. ..$ X2: int [1:1297] 43 30 78 53 102 103 121 111 27 100 ...
# $ S1_S3_S4:List of 4
# ..$ AB_df:'data.frame': 1218 obs. of 2 variables:
# .. ..$ X1: int [1:1218] 117 118 82 100 27 85 16 50 63 64 ...
# .. ..$ X2: int [1:1218] 12 122 103 90 45 69 34 7 129 10 ...
# ..$ BC_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 69 47 48 53 11 0 55 101 128 112 ...
# .. ..$ X2: int [1:1242] 35 96 18 75 103 98 118 27 37 122 ...
# ..$ DE_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 115 67 53 40 118 114 75 127 42 32 ...
# .. ..$ X2: int [1:1242] 117 25 101 106 12 73 88 92 65 5 ...
# ..$ FG_df:'data.frame': 1296 obs. of 2 variables:
# .. ..$ X1: int [1:1296] 125 32 83 12 120 44 11 22 63 26 ...
# .. ..$ X2: int [1:1296] 43 30 78 53 102 103 121 111 27 100 ...
# $ S2_S3_S4:List of 4
# ..$ AB_df:'data.frame': 1218 obs. of 2 variables:
# .. ..$ X1: int [1:1218] 75 8 26 23 50 65 35 50 44 78 ...
# .. ..$ X2: int [1:1218] 1 11 5 67 11 4 75 118 43 93 ...
# ..$ BC_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 103 7 116 17 88 111 77 8 108 50 ...
# .. ..$ X2: int [1:1242] 76 118 97 80 53 121 21 115 106 5 ...
# ..$ DE_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 109 49 94 58 80 111 71 80 78 115 ...
# .. ..$ X2: int [1:1242] 89 16 120 107 67 16 17 87 53 19 ...
# ..$ FG_df:'data.frame': 1297 obs. of 2 variables:
# .. ..$ X1: int [1:1297] 99 112 100 127 26 11 64 23 29 8 ...
# .. ..$ X2: int [1:1297] 58 4 20 114 0 24 93 0 124 47 ...
我有一个如下所示的数据框。
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)。
我现在想 rbind 这些样本,但总是遗漏其中一个。因此,对于 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...
的结果考虑使用 combn
呈现三个的所有组合,然后 运行 嵌套 lapply
以连接所需的示例数据帧:
sample_combos <- combn(paste0("S", c(1:4)), 3, simplify=FALSE)
sample_df_list <- lapply(sample_combos, function(s)
lapply(df_list, function(lst) do.call(rbind, lst[s]))
)
names(sample_df_list) <- lapply(sample_combos, function(s) paste(s, collapse="_"))
或者,combn
有一个函数参数:
# UNNAMED LIST OF DFs
sample_combos <- combn(paste0("S", c(1:4)), 3, function(s)
lapply(df_list, function(lst) do.call(rbind, lst[s])),
simplify = FALSE
)
输出
sample_combos
# List of 4
# $ S1_S2_S3:List of 4
# ..$ AB_df:'data.frame': 1218 obs. of 2 variables:
# .. ..$ X1: int [1:1218] 117 118 82 100 27 85 16 50 63 64 ...
# .. ..$ X2: int [1:1218] 12 122 103 90 45 69 34 7 129 10 ...
# ..$ BC_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 69 47 48 53 11 0 55 101 128 112 ...
# .. ..$ X2: int [1:1242] 35 96 18 75 103 98 118 27 37 122 ...
# ..$ DE_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 115 67 53 40 118 114 75 127 42 32 ...
# .. ..$ X2: int [1:1242] 117 25 101 106 12 73 88 92 65 5 ...
# ..$ FG_df:'data.frame': 1297 obs. of 2 variables:
# .. ..$ X1: int [1:1297] 125 32 83 12 120 44 11 22 63 26 ...
# .. ..$ X2: int [1:1297] 43 30 78 53 102 103 121 111 27 100 ...
# $ S1_S2_S4:List of 4
# ..$ AB_df:'data.frame': 1218 obs. of 2 variables:
# .. ..$ X1: int [1:1218] 117 118 82 100 27 85 16 50 63 64 ...
# .. ..$ X2: int [1:1218] 12 122 103 90 45 69 34 7 129 10 ...
# ..$ BC_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 69 47 48 53 11 0 55 101 128 112 ...
# .. ..$ X2: int [1:1242] 35 96 18 75 103 98 118 27 37 122 ...
# ..$ DE_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 115 67 53 40 118 114 75 127 42 32 ...
# .. ..$ X2: int [1:1242] 117 25 101 106 12 73 88 92 65 5 ...
# ..$ FG_df:'data.frame': 1297 obs. of 2 variables:
# .. ..$ X1: int [1:1297] 125 32 83 12 120 44 11 22 63 26 ...
# .. ..$ X2: int [1:1297] 43 30 78 53 102 103 121 111 27 100 ...
# $ S1_S3_S4:List of 4
# ..$ AB_df:'data.frame': 1218 obs. of 2 variables:
# .. ..$ X1: int [1:1218] 117 118 82 100 27 85 16 50 63 64 ...
# .. ..$ X2: int [1:1218] 12 122 103 90 45 69 34 7 129 10 ...
# ..$ BC_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 69 47 48 53 11 0 55 101 128 112 ...
# .. ..$ X2: int [1:1242] 35 96 18 75 103 98 118 27 37 122 ...
# ..$ DE_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 115 67 53 40 118 114 75 127 42 32 ...
# .. ..$ X2: int [1:1242] 117 25 101 106 12 73 88 92 65 5 ...
# ..$ FG_df:'data.frame': 1296 obs. of 2 variables:
# .. ..$ X1: int [1:1296] 125 32 83 12 120 44 11 22 63 26 ...
# .. ..$ X2: int [1:1296] 43 30 78 53 102 103 121 111 27 100 ...
# $ S2_S3_S4:List of 4
# ..$ AB_df:'data.frame': 1218 obs. of 2 variables:
# .. ..$ X1: int [1:1218] 75 8 26 23 50 65 35 50 44 78 ...
# .. ..$ X2: int [1:1218] 1 11 5 67 11 4 75 118 43 93 ...
# ..$ BC_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 103 7 116 17 88 111 77 8 108 50 ...
# .. ..$ X2: int [1:1242] 76 118 97 80 53 121 21 115 106 5 ...
# ..$ DE_df:'data.frame': 1242 obs. of 2 variables:
# .. ..$ X1: int [1:1242] 109 49 94 58 80 111 71 80 78 115 ...
# .. ..$ X2: int [1:1242] 89 16 120 107 67 16 17 87 53 19 ...
# ..$ FG_df:'data.frame': 1297 obs. of 2 variables:
# .. ..$ X1: int [1:1297] 99 112 100 127 26 11 64 23 29 8 ...
# .. ..$ X2: int [1:1297] 58 4 20 114 0 24 93 0 124 47 ...