R语言中如何对向量的随机子集进行位置置换?
R语言实现向量随机子集的位置置换
需求说明
生成与原向量x完全一致的新向量x2,仅将x中随机选取的40%元素的位置进行随机交换。
示例:
- 原向量
x:1, 2, 3, 4, 5, 6, 7, 8, 9, 10 - 选中的随机子集位置对应元素:
1, 4, 5, 8 - 置换后
x2:4, 2, 3, 8, 1, 6, 7, 5, 9, 10
实现代码
直接对向量的位置索引采样(避免原代码中元素重复导致的匹配错误),再对选中位置的元素做随机置换:
# 生成原向量 x <- seq(1, 10, 1) # 采样40%的元素位置索引(floor确保取整) subset_indices <- sample(length(x), size = floor(length(x)*0.4)) # 初始化x2为原向量的副本 x2 <- x # 将选中位置的元素随机打乱后重新赋值 x2[subset_indices] <- sample(x2[subset_indices])
代码说明
- 索引采样:
sample(length(x), size = floor(length(x)*0.4))直接从向量的位置索引中选取40%的位置,无论原向量是否包含重复元素,都能精准选中指定比例的元素位置,比原代码通过元素匹配选索引的方式更可靠。 - 子集置换:
x2[subset_indices] <- sample(x2[subset_indices])仅对选中位置的元素进行随机打乱,其他位置元素保持与原向量一致,完全符合需求。
内容的提问来源于stack exchange,提问作者Buddhika Bellana
相关产品推荐
相关产品推荐

