Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.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_Random_Sampling - Fatal编程技术网

R 从数据帧跟踪中分层随机抽样

R 从数据帧跟踪中分层随机抽样,r,random,sampling,R,Random,Sampling,我试图随机抽取以下各组50%的数据。在R中使用mtcars数据集的可复制示例如下所示。我不明白的是,样本索引清楚地显示了一组标记为“5”的档位,但当索引应用于mtcars数据集时,样本数据mtcars2不包含来自档位为“5”的任何记录。出了什么问题?多谢各位 > set.seed(14908141) > index=tapply(1:nrow(mtcars),mtcars$gear,function(x){sample(length(x),length(x)*0.5)}) >

我试图随机抽取以下各组50%的数据。在R中使用mtcars数据集的可复制示例如下所示。我不明白的是,样本索引清楚地显示了一组标记为“5”的档位,但当索引应用于mtcars数据集时,样本数据mtcars2不包含来自档位为“5”的任何记录。出了什么问题?多谢各位

> set.seed(14908141)
> index=tapply(1:nrow(mtcars),mtcars$gear,function(x){sample(length(x),length(x)*0.5)})
> index
$`3`
[1]  6  7 14  4 12  9 13

$`4`
[1] 12  7  8  4  6  5

$`5`
[1] 5 1

> mtcars2=mtcars[unlist(index),]
> table(mtcars2$gear)

 3  4 
12  3 

我认为您所采用的方法为每个
gear
组创建了一个编号
1:length(mtcars$gear)
,因此您将为每个组重复行编号。然后,当它不工作时,在上面的输出中可以看到,在
gear
3
4
中都有行数
7

基本R

我会先使用
split
按档位分割:

res <- split(mtcars, mtcars$gear)
如果希望在末尾有一个数据集(而不是列表),可以使用
do.call

final_df <- do.call(rbind, res2)

我认为您所采用的方法为每个
gear
组创建了一个编号
1:length(mtcars$gear)
,因此您将为每个组重复行编号。然后,当它不工作时,在上面的输出中可以看到,在
gear
3
4
中都有行数
7

基本R

我会先使用
split
按档位分割:

res <- split(mtcars, mtcars$gear)
如果希望在末尾有一个数据集(而不是列表),可以使用
do.call

final_df <- do.call(rbind, res2)

非常感谢您的快速回复。我注意到一个问题,同一个记录被包含在多个组中。是否可以使用tapply()或其他一些base R函数更正我上面的代码?请参阅上面的基类型解决方案do.call(),这正是我需要的,非常感谢。非常感谢您的快速响应。我注意到一个问题,同一个记录被包含在多个组中。是否可以使用tapply()或其他一些base R函数更正我上面的代码?请参阅上面的基类型解决方案do.call(),这正是我需要的,非常感谢。