You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中对数据集子集的Class列随机重分配且保留原行

解决方法:在原数据框中对指定子集的Class列随机重分配

我完全get到你的需求了——你不需要抽取行出来处理,而是要在原数据框里保留所有行的前提下,给一部分行的Class列随机重新分配值,其他行的Class保持原样,对吧?

下面是具体的实现步骤和代码:


步骤说明

  1. 确定你要重分配Class值的行数量(比如你提到的子集大小N)
  2. 随机挑选这些行的索引
  3. 从原数据框的Class列所有取值中,随机抽样(有放回,保证可以重复出现原类别),替换掉选中行的Class值

代码示例(R语言)

假设你的数据框名为df,我们用你提供的示例数据来演示:

# 构造示例数据框
df <- data.frame(
  Index = 1:4,
  B = c(3, 1, 9, 1),
  C = c(4, 9, 1, 1),
  Class = c("Dog", "Cat", "Dog", "Cat")
)

# 设置随机种子(保证结果可复现,可选)
set.seed(123)

# 定义要重分配Class的行数N
N <- 3

# 随机选择N行的索引
resample_rows <- sample(nrow(df), N)

# 对选中行的Class列进行随机重采样(从原Class取值中抽样,有放回)
df$Class[resample_rows] <- sample(df$Class, N, replace = TRUE)

# 查看结果
print(df)

运行后可能得到类似你期望的结果(因为随机性,每次结果会有差异):

Index B C Class
1     1 3 4   Cat
2     2 1 9   Dog
3     3 9 1   Dog
4     4 1 1   Dog

为什么你的原代码不符合需求?

你之前的sample(Class[sample(nrow(Class),N),])是先抽取了N行,再对这些行的Class重采样,最终得到的是一个单独的重采样后的Class向量(甚至可能是行子集),而不是在原数据框上修改指定行的Class值。我们上面的方法直接在原数据框的指定位置修改,完全保留了所有行的其他列数据,符合你的需求。

内容的提问来源于stack exchange,提问作者F.D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:48:54