如何划分数据集以测试和训练一组人的尊重

时间:2019-09-11 17:37:29

标签: r dataframe

我想将数据集分为训练数据和测试数据。但我有一个专栏作为一个小组。小组中的所有成员都必须接受训练或测试。例如,如果组列是这样的:

         group
           1
           1
           1
           1
           1
           2
           2
           2
           3
           3

如果第一组的某行在火车集合中,则前5行必须在其中并...

3 个答案:

答案 0 :(得分:1)

让我们假设您总共有20个小组,并且您希望训练集中有8个小组,而测试集中还有12个小组。

首先,让我们生成一些数据以供播放:

RecyclerView

当您要按组而不是观察进行采样时,现在从您的训练集中从组中随机抽取大小为8的样本,并将其余样本放入测试集中。

dat <- data.frame(group=factor(rep(1:20, each=5)), value=rnorm(100))

答案 1 :(得分:1)

使用dplyr的解决方案。 dat_traindat_test是最终结果。我假设有一个10000组训练数据集和5000组测试数据集的情况。

library(dplyr)

# Set seed for reproducibility
set.seed(12345)

# Create an example data frame with group and data
dat <- tibble(group = rep(1:15000, each = 5),
              data = rnorm(75000))

# Step 1: Create a look up table showing group number
g <- dat %>% distinct(group)

# Step 2: Use sample_n to sampel for train
g_train <- g %>% sample_n(size = 10000)

# Step 3: Use semi_join and anti_join to split dat into train and test
dat_train <- dat %>% semi_join(g_train, by = "group")
dat_test <- dat %>% anti_join(g_train, by = "group")

答案 2 :(得分:-1)

您可以使用dplyrtidyverse(软件包)来解决此问题。

假设数据集的名称为df1

这里是一个例子:

library(dplyr)
library(tidyverse)

training_data <- df1 %>% filter(group=1)

testing_data <- df1 %>% filter(group=2)