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

如何在R中生成和为指定值的随机整数向量并添加至数据框

生成指定总和的随机整数列(Tidyverse风格)

假设你需要的目标总和为target_sum(示例设为500),可以用以下代码实现需求:

library(dplyr)
library(magrittr)

# 设定目标总和
target_sum <- 500

my_df %<>%
  mutate(
    # 生成前n-1个随机正整数,预留空间保证最后一个数≥1
    temp = case_when(
      row_number() < n() ~ sample.int(target_sum - (n() - 1), n() - 1, replace = TRUE),
      TRUE ~ NA_integer_
    ),
    # 计算最后一个数,确保整列和为设定值
    my_new_column = case_when(
      row_number() < n() ~ temp,
      TRUE ~ target_sum - sum(temp, na.rm = TRUE)
    )
  ) %>%
  select(-temp) # 删除临时列

关键逻辑说明

  1. 正整数保障:sample.int(target_sum - (n()-1), ...)限制了前n-1个数的最大值,确保最后一个数target_sum - sum(temp)必然≥1,避免出现非正整数。
  2. 精准总和控制:通过最后一个数补全总和,保证整列求和严格等于target_sum。
  3. Tidyverse风格兼容:全程使用dplyr函数链,匹配你的代码书写习惯。

验证结果

执行以下代码确认求和是否符合预期:

sum(my_df$my_new_column)
# 输出应为设定的target_sum值

如果允许随机数包含0,可简化逻辑,去掉- (n()-1)的限制:

my_df %<>%
  mutate(
    temp = case_when(
      row_number() < n() ~ sample.int(target_sum, n() - 1, replace = TRUE),
      TRUE ~ NA_integer_
    ),
    my_new_column = case_when(
      row_number() < n() ~ temp,
      TRUE ~ target_sum - sum(temp, na.rm = TRUE)
    )
  ) %>%
  select(-temp)

内容的提问来源于stack exchange,提问作者Faustin Gashakamba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:00:28