在R中创建训练集和测试集

时间:2016-02-29 11:09:29

标签: r machine-learning

我正在从事一个项目,我需要建立一个机器学习模型。我需要根据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, ]

2 个答案:

答案 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)

如果您需要随机生成traintest,您可以先将df分割为docnr,然后根据所需的比例随机播放生成的数据框列表;最后将数据帧转换为traintest

# 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])
相关问题