【发布时间】:2020-04-22 06:43:20
【问题描述】:
我正在尝试将我的数据框列表拆分为某种子组,例如嵌套列表或多个列表。拆分应该基于每个数据帧的行数,因此具有相同行数的数据帧应该在同一个列表中结束。
full_list <- list(
df1 = replicate(10, sample(0:1, 10, replace = TRUE)),
df2 = replicate(10, sample(0:1, 15, replace = TRUE)),
df3 = replicate(10, sample(0:1, 20, replace = TRUE)),
df4 = replicate(10, sample(0:1, 10, replace = TRUE))
)
现在有两个带有nrow() == 10 的数据框,所以它们应该在自己的列表或子列表中结束
我尝试过这样的事情,但我认为split 不适用于列表:
sublist <- lapply(full_list, function(x) split(full_list, f = nrow(x)))
顺便说一句:更大的目标是将所有数据帧拆分为训练数据集和测试数据集,用于使用以下函数进行机器学习。 sample 将用于创建子集,但我希望相同长度的数据帧使用相同的 sample_vector。因此,我想事先将完整列表拆分为子列表。之后,我将再次将所有数据帧放在一起以进行进一步处理(拆分-应用-组合)。只是提一下我是否可能在这里使事情过于复杂。
# function to split data frames in each sub list into train and test data frames
counter <- 0
train_test_list <- list()
for (x_table in sublist) {
counter <- counter + 1
current_name <- paste(names(sublist)[counter], sep = "_")
sample_vector <- sample.int(n = nrow(x_table),
size = floor(0.8 * nrow(x_table)), replace = FALSE)
train_set <- x_table[sample_vector, ]
test_set <- x_table[-sample_vector, ]
train_test_list[[current_name]] <- list(
train_set = train_set, test_set = test_set,
table_name = names(sublist)[counter]
)
}
# combine all lists with test and train pairs back into one list
full_train_test_list <- c(train_test_list1, train_test_list2, train_test_list3, ...)
【问题讨论】: