随机采样数据集以减少数据集中的值

randomly sampling of dataset to decrease the values in the dataset

我目前正在尝试根据给定的总和随机减少列中的值。 比如主数据是这样的;

ID 值

1 4
2 10
3 16

在运行代码之后,Value的总和应该是10,这需要随机完成(每个成员的减少应该随机选择)

ID 值

1 1
2 8
3 1

尝试了几个命令和库但无法管理。还是新手并且 如有任何帮助,我们将不胜感激!

谢谢

编辑:对不起,我不够清楚。我想为每个小于原始(随机)的观察值分配一个新值。最后新的价值总和将等于 10

使用示例数据

dd <- read.table(text="ID Value
1 4
2 10
3 16", header=TRUE)

dplyr + tidyr库,你可以做

library(dplyr)
library(tidyr)

dd %>% 
  mutate(ID=factor(ID)) %>% 
  uncount(Value) %>%
  sample_n(10) %>% 
  count(ID, name = "Value", .drop=FALSE)

这里我们为每个 Value 重复一次该行,然后我们随机抽取 10 行,然后我们将它们重新计数。我们将 ID 转换为一个因素,以确保保留具有 0 个观察值的 ID。