我正在进行一个项目,需要构建一个机器学习模型。我需要根据行名创建一个训练集和测试集。我已经搜索了几个小时,但始终找不到合适的代码。我有以下数据框:
df <- data.frame(docnr= c("doc1", "doc1", "doc2", "doc2", "doc3", "doc3"),x = c(1,4,2,3,6,5), y = c(5,6,3,9,5,2))docnr x y doc1 1 5 doc1 4 6 doc2 2 3 doc2 3 9 doc3 6 5 doc3 5 2
现在我想根据docnr
列创建训练集和测试集。例如,doc1和doc3必须在训练集中,而doc2必须在测试集中。
train = doc1 1 5 doc1 4 6 doc3 6 5 doc3 5 2test = doc2 2 3doc2 3 9
使用以下代码,我能够创建训练集和测试集,但这并不是我想要的结果。
smp_size <- floor(0.67 * nrow(df))train_ind <- sample(seq_len(nrow(df)), size = smp_size)train <- df[train_ind, ]test <- df[-train_ind, ]
回答:
如果你需要随机生成train
和test
,你可以首先根据docnr
分割你的df
,然后根据你想要的比例打乱生成的数据框列表;最后将数据框合并到train
和test
中。
# Split df per docnrd1 <- split(df,df$docnr)# Define ratio and shufflesmp_size <- floor(0.67 * length(d1))train_ind <- sample(seq_len(length(d1)), size = smp_size)# define train and testtrain <- rbindlist(d1[train_ind])test <- rbindlist(d1[-train_ind])