Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
随机分配给训练/测试数据集时,将R数据帧中的行分组在一起_R_Sampling_Cross Validation - Fatal编程技术网

随机分配给训练/测试数据集时,将R数据帧中的行分组在一起

随机分配给训练/测试数据集时,将R数据帧中的行分组在一起,r,sampling,cross-validation,R,Sampling,Cross Validation,我有一个数据帧,它由X行块组成,每个行对应一个单独的行(其中X对于每个单独的行可能不同)。我想将这些个体随机分配到训练、测试和验证样本中,但到目前为止,我还无法获得正确的语法,以确保用户的X行中的每一行始终收集到相同的子样本中 例如,数据可以简化为: user feature1 feature2 1 "A" "B" 1 "L" "L" 1 "Q" "B" 1

我有一个数据帧,它由X行块组成,每个行对应一个单独的行(其中X对于每个单独的行可能不同)。我想将这些个体随机分配到训练、测试和验证样本中,但到目前为止,我还无法获得正确的语法,以确保用户的X行中的每一行始终收集到相同的子样本中

例如,数据可以简化为:

user    feature1     feature2
 1        "A"           "B"
 1        "L"           "L"
 1        "Q"           "B"
 1        "D"           "M"
 1        "D"           "M"
 1        "P"           "E"
 2        "A"           "B"
 2        "R"           "P"
 2        "A"           "F"
 3        "X"           "U"
...       ...           ...
然后,如果我最终将用户随机分配到一个训练集、测试集或验证集,那么该用户的所有行(用户编号是唯一的)都将在同一个集中,并分组在一起,例如,如果用户1在训练集中,那么格式仍然是:

user    feature1     feature2
 1        "A"           "B"
 1        "L"           "L"
 1        "Q"           "B"
 1        "D"           "M"
 1        "D"           "M"
 1        "P"           "E"
作为奖励,我很想知道这个问题的解决方案是否可以扩展到进行k-fold交叉验证,但到目前为止,我还没有想出更简单的第一步


提前感谢。

我们可以先创建一个索引来指示每组数据。我选择了test:60%,train:40%,validation:10%,但是您可以使用
sample
prob=
参数选择所需的比率。然后,我们通过
用户
拆分数据帧。最后,我们根据我们创建的索引对用户进行
rbind
。然后我们可以调用
all_dfs[['train']]
,依此类推:

indx <- sample(1:3, length(unique(df$user)), replace=TRUE, prob=c(.6,.4,.1))
s <- split(df, df$user)
all_dfs <- lapply(1:3, function(x) do.call(rbind, s[indx==x]))
names(all_dfs) <- c('train', 'test', 'validation')

indx询问堆栈溢出。