我正在从事一个项目,我需要建立一个机器学习模型。我需要根据rownames创建一个trainingset和testset。我一直在寻找几个小时,但我找不到合适的代码。 我有以下数据框:
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必须位于traininset中,而doc2必须位于testset中。例如。
train =
doc1 1 5
doc1 4 6
doc3 6 5
doc3 5 2
test =
doc2 2 3
doc2 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, ]
答案 0 :(得分:0)
尝试例如。
test <- setdiff(df, train)
或
SELECT COUNT(*) count_value
FROM table_a
WHERE value_a IN (check_value)
GROUP BY value_a
答案 1 :(得分:0)
如果您需要随机生成train
和test
,您可以先将df
分割为docnr
,然后根据所需的比例随机播放生成的数据框列表;最后将数据帧转换为train
和test
。
# Split df per docnr
d1 <- split(df,df$docnr)
# Define ratio and shuffle
smp_size <- floor(0.67 * length(d1))
train_ind <- sample(seq_len(length(d1)), size = smp_size)
# define train and test
train <- rbindlist(d1[train_ind])
test <- rbindlist(d1[-train_ind])