我想将数据集分为训练数据和测试数据。但我有一个专栏作为一个小组。小组中的所有成员都必须接受训练或测试。例如,如果组列是这样的:
group
1
1
1
1
1
2
2
2
3
3
如果第一组的某行在火车集合中,则前5行必须在其中并...
答案 0 :(得分:1)
让我们假设您总共有20个小组,并且您希望训练集中有8个小组,而测试集中还有12个小组。
首先,让我们生成一些数据以供播放:
RecyclerView
当您要按组而不是观察进行采样时,现在从您的训练集中从组中随机抽取大小为8的样本,并将其余样本放入测试集中。
dat <- data.frame(group=factor(rep(1:20, each=5)), value=rnorm(100))
答案 1 :(得分:1)
使用dplyr
的解决方案。 dat_train
和dat_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)
您可以使用dplyr
和tidyverse
(软件包)来解决此问题。
假设数据集的名称为df1
。
这里是一个例子:
library(dplyr)
library(tidyverse)
training_data <- df1 %>% filter(group=1)
testing_data <- df1 %>% filter(group=2)