问题描述
library(data.table)
library(string)
library(plyr)
dt <- data.table(
from = rep(LETTERS[1:10],each=3),to = rep(letters[1:3],10),from_n = rep(sample(50:100,to_n = rep(sample(1:10,3,replace = T),10)
)
我正在尝试将数据集分为随机抽样的测试和训练数据集,其中包含每个组(“ from”)的观测值(“ from_n”)的80%和20%。
我目前可以使用for循环并创建随机混洗的矢量来进行此操作。例如:
test_list <- list()
train_list <- list()
for (i in 1:length(unique(dt$from))){ # for each unique "from"
sub <- dt[from == unique(dt$from)[i]]
n_1 <- sub$to_n[1]
n_2 <- sub$to_n[2]
n_3 <- sub$to_n[3]
n_NA <- sub$from_n[1] - sum(n_1,n_2,n_3)
sample_vec <- sample( c( rep(NA,n_NA),# create randomised vector
rep(sub$to[1],n_1),rep(sub$to[2],n_2),rep(sub$to[3],n_3) ) )
train <- sample_vec[1:floor(length(sample_vec)*0.8)]
train_dt <- data.table(from = sub$from,to = sub$to,from_n = rep(length(train),3),to_n = c(length(train[which(train == sub$to[1])]),length(train[which(train == sub$to[2])]),length(train[which(train == sub$to[3])])
))
test <- sample_vec[(floor(length(sample_vec)*0.8)+1):length(sample_vec)]
test_dt <- data.table(from = sub$from,from_n = rep(length(test),to_n = c(length(test[which(test == sub$to[1])]),length(test[which(test == sub$to[2])]),length(test[which(test == sub$to[3])])
))
test_list[[i]] <- test_dt
train_list[[i]] <- train_dt
}
但是,我需要将此应用于的数据集非常大,而且速度太慢。有人对我如何提高性能有任何建议吗?
谢谢。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)