R语言iris数据集简单随机抽样行号不一致问题问询
关于iris数据集抽样后行号不一致的原因及解决办法
原因解析
你遇到的问题核心是行名(row names)和行索引(位置序号)的混淆:
- 当你用
iris[order(iris$Species, iris$Sepal.Length), ]生成iris.new时,R默认会保留原iris数据集的行名,这些行名是原数据里的原始编号(比如1到150)。 - 而
sample(1:nrow(iris.new), 20)抽取的是iris.new的行位置索引(也就是新数据框里第1行、第2行...的序号),不是原数据的行名。
所以当你用抽取的索引子集化iris.new后,看到的行号其实是原数据集的行名,和你sample得到的位置序号自然对不上,这只是视觉上的“不一致”,实际抽样逻辑是正确的。
解决办法
如果想要让抽样得到的序号和子集化后的行号完全对应,只需要在生成iris.new后重置行名即可:
# 排序并生成新数据框 iris.new <- iris[order(iris$Species, iris$Sepal.Length), ] # 重置行名为连续的1到150 rownames(iris.new) <- NULL # 后续抽样步骤不变 set.seed(60900921) iris.sample <- sample(1:nrow(iris.new), 20) iris.sample.df <- iris.new[iris.sample, ]
此时iris.sample.df的行名就会和你抽取的iris.sample数字完全一致。
内容的提问来源于stack exchange,提问作者four77
相关产品推荐
相关产品推荐

