R 从数据帧跟踪中分层随机抽样
我试图随机抽取以下各组50%的数据。在R中使用mtcars数据集的可复制示例如下所示。我不明白的是,样本索引清楚地显示了一组标记为“5”的档位,但当索引应用于mtcars数据集时,样本数据mtcars2不包含来自档位为“5”的任何记录。出了什么问题?多谢各位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)}) >
> 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(),这正是我需要的,非常感谢。